簡體   English   中英

未經授權后重定向到登錄頁面時如何自定義returnurl

[英]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頁面將表單提交到上述操作時,它會自動將頁面重定向到

  • /身份/帳戶/登錄?ReturnUrl= %2FCart%2FAddToCart

如何將此默認returnurl值自定義為其他值。 喜歡

  • /Identity/Account/Login?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 如下所示

  • /身份/帳戶/登錄?ReturnUrl= %2FCart%2FAddToCart%3FreturnUrl%252FShop%252FProductDetail%253Fid%253D42

我想要的是

  • /Identity/Account/Login?ReturnUrl= /Shop/ProductDetail?id=42

解決方案
當我從ProductDetail視圖提交表單到AddToCart操作時,它會自動將頁面重定向到Login視圖。 但是 returnUrl 是/AddToCart而不是ProductDetail?itemNumber=10 所以我做了什么:

  1. ProductDetial視圖表單標簽中傳遞 returnUrl。
<form method="post" asp-controller="Cart" asp-action="AddToCart" asp-route-returnUrl="@Context.Request.Path@Context.Request.QueryString">
  1. 這將重定向到Login視圖,returnUrl 包含以下內容。
/Cart/AddToCart?returnUrl=%2FShop%2FProductDetail%3FitemNumber%3D10
  1. 所以在Login view中我提取了最新的 returnUrl
public 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM