[英]How to customize returnurl when it redirect to Login page after unauthorized
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult AddToCart(int itemNumber)
{
// do somthing here...
return RedirectToAction("CartList");
}
當我從/Shop/ProductDetail?id=42
頁面將表單提交到上述操作時,它會自動將頁面重定向到
%2FCart%2FAddToCart
如何將此默認returnurl
值自定義為其他值。 喜歡
<my custom return url>
我嘗試在表單標簽中添加 returnurl
<form method="post" asp-controller="Cart" asp-action="AddToCart" asp-route-returnUrl="@Context.Request.Path@Context.Request.QueryString">
但它返回 url 如下所示
%2FCart%2FAddToCart%3FreturnUrl%252FShop%252FProductDetail%253Fid%253D42
我想要的是
/Shop/ProductDetail?id=42
解決方案
當我從ProductDetail
視圖提交表單到AddToCart
操作時,它會自動將頁面重定向到Login
視圖。 但是 returnUrl 是/AddToCart
而不是ProductDetail?itemNumber=10
。 所以我做了什么:
ProductDetial
視圖表單標簽中傳遞 returnUrl。<form method="post" asp-controller="Cart" asp-action="AddToCart" asp-route-returnUrl="@Context.Request.Path@Context.Request.QueryString">
Login
視圖,returnUrl 包含以下內容。/Cart/AddToCart?returnUrl=%2FShop%2FProductDetail%3FitemNumber%3D10
Login view
中我提取了最新的 returnUrlpublic async Task<IActionResult> Login(LoginVM model, string returnUrl = null)
{
returnUrl ??= Url.Content("~/");
var index = returnUrl.LastIndexOf(nameof(returnUrl));
if (index != -1)
{
returnUrl = returnUrl.Substring(index + nameof(returnUrl).Length + 1);
returnUrl = HttpUtility.UrlDecode(returnUrl);
//returnUrl : /Shop/ProductDetail?id=42
}
}
我不確定這是正確的方法嗎?
文檔建議您使用ViewData
存儲返回 url,因此在獲取ProductDetail
時嘗試將ViewData["ReturnUrl"]
設置為"/Shop/ProductDetail?id={replace_by_item_id}
並按照示例進行操作:
asp-route-returnurl="@ViewData["ReturnUrl"]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.