Asp.net core mvc 如何将重定向URL从Create action GET传递到POST

Asp.net core mvc 如何将重定向URL从Create action GET传递到POST,asp.net-core-mvc,Asp.net Core Mvc,我正在尝试将RedirectUrl值从GET操作传递到POST操作,该值在操作用[Authorize]修饰时填充 当我使用TempData或ViewBag时,隐藏的INPUT元素不会被填充 /Credential/Create-GET: public IActionResult Create(string returnUrl = null) { // either option has the same effect //TempData["returnUrl"] = retur

我正在尝试将
RedirectUrl
值从
GET
操作传递到
POST
操作,该值在操作用
[Authorize]
修饰时填充

当我使用
TempData
ViewBag
时,隐藏的
INPUT
元素不会被填充

/Credential/Create-GET

public IActionResult Create(string returnUrl = null)
{
    // either option has the same effect
    //TempData["returnUrl"] = returnUrl;
    ViewBag.ReturnUrl = returnUrl;

    return View();
}
生成的HTML:

<input type="hidden" name="returnUrl" />
然后,输入包含视图模型的类名:

<input type="hidden" name="returnUrl" value="Foo.Models.ViewModels.CredentialViewModel" />
只需使用:

<input type="hidden" name="returnUrl" value="@Context.Request.Query["returnUrl"].SingleOrDefault()" />


然后,您甚至不需要费心设置
ViewBag

参考AccountController的工作方式,特别是登录方法调用如何在结果中工作。值得注意的是,您的
作为其编码将始终显示该viewmodel的整个名称空间,因为您实际上没有告诉它获取属性
value=“@Model.ReturnUrl”
(例如)。
但您应该将其作为查询字符串值添加到
元素中,而不是隐藏的输入。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("EmailAddress,Password")] CredentialViewModel credential, string returnUrl = null)
{
    // null
    Console.WriteLine(returnUrl);
}
<input type="hidden" name="returnUrl" value="@Context.Request.Query["returnUrl"].SingleOrDefault()" />