我無法ReturnUrl開始HttpPost使用 ASP.NET Core 6 MVC。
POST向方法添加斷點時,returnurl始終為 null。但是對于 .NET 5,它可以使用相同的代碼設定,但對于 .NET 6,我需要將returnurl引數設定為可為空,這樣我就不會收到錯誤“需要回傳 URL 欄位”。
這是我正在使用的代碼 - 任何幫助將不勝感激。
謝謝。
模型:
namespace IdentityManagerDotNet6.Models
{
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; } = string.Empty;
[Required]
[DataType(DataType.Password)]
public string Password { get; set; } = string.Empty;
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
}
控制器
[HttpGet]
public IActionResult Login(string? returnurl)
{
ViewData["ReturnUrl"] = returnurl;
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel loginViewModel, string? returnurl)
{
ViewData["ReturnUrl"] = returnurl;
returnurl = returnurl ?? Url.Content("~/");
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(loginViewModel.Email, loginViewModel.Password, loginViewModel.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
return LocalRedirect(returnurl);
}
if (result.IsLockedOut)
{
return View("Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return View(loginViewModel);
}
}
return View(loginViewModel);
}
看法:
@model LoginViewModel
<h1 class="text-info">Log in</h1>
<div class="row">
<div class="col-md-8">
<form asp-controller="Account" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" role="form">
<h4>Use a local account to log in</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Email" class="col-md-2"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group mt-3">
<label asp-for="Password" class="col-md-2"></label>
<div class="col-md-10">
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-check mt-3">
<input class="form-check-input" asp-for="RememberMe" type="checkbox" value="" id="flexCheckChecked">
<label class="form-check-label" asp-for="RememberMe" for="flexCheckChecked">
Remember me?
</label>
</div>
<div class="form-group">
<div class=" col-1 my-3">
<button type="submit" asp-controller="Account" asp-action="Login" class="btn btn-success form-control">Login</button>
</div>
</div>
<p>
<a asp-action="Register">Register as a new user?</a>
</p>
<p>
<a asp-action="ForgotPassword">Forgot your passord?</a>
</p>
</form>
</div>
</div>
uj5u.com熱心網友回復:
"I'm not able to get ReturnUrl to work on HttpPost using ASP.NET Core 6 MVC.":
我已經檢查了您的代碼。它沒有任何問題
[FromQuery]所以你不需要做任何事情,[FromQuery]因為我看到的其他答案現在可能會被洗掉。
Issue Replication:
我已成功重現您的問題,如下所示:

What Causing the Issue:
如果您再次調查您的代碼,您會注意到您在開始時使用
asp-controller="Login" asp-action="Login"了兩次, 此時您在提交表單時會導致資料丟失。Login.cshtmlformsubmit button
At the starting on form:
<form asp-controller="Login" asp-action="Login" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" role="form">
At your button submit::
<button type="submit" asp-controller="Login" asp-action="Login" class="btn btn-success form-control">Login</button>
Solution:
最簡單的解決方案是修改您的submit button code類似下面的內容,這將解決您的問題:
<div class="form-group">
<div class=" col-1 my-3">
<button type="submit" class="btn btn-success form-control">Login</button>
</div>
</div>
Output:

希望它能returnurl徹底解決您的 null 問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461412.html
