[英]Redirect to “You Are Forbidden” page without changing URL ASP.NET MVC
我在項目中設置了自定義授權屬性,以對用戶權限進行一些檢查。 如果不允許他們進行某些活動,則會通過RedirectToRouteResult
其重定向到“您被禁止”頁面。 但是,我想在不更改URL的情況下實現此功能,以便用戶在獲得許可后可以刷新頁面。 這可能嗎?
我目前的狀況。 它將發送到URL Forbidden/
。
[AttributeUsage(AttributeTargets.Method)]
public class AuthActivityAttribute : ActionFilterAttribute
{
public string ActivityName { get; set; }
public int ActivityId = 0;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!ViewIsAuthorizedActivity(ActivityName))
{
filterContext.Result = Forbid();
base.OnActionExecuting(filterContext);
}
}
public RedirectToRouteResult Forbid()
{
return new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "Home" },
{ "action", "Forbidden" },
{ "Activity", ActivityId },
{ "area", ""}
});
}
// other stuff
}
編輯/解決方案:
我最終將渲染PartialView
用於GET請求和RedirectToRouteResult
用於POST請求結合起來使用。 我之所以選擇它,有兩個原因:
用戶在失去權限之前已加載頁面,因此未加載“禁止的部分視圖”。 在POST上沒有RedirectToRouteResult
情況下,即使沒有權限,它們也可以進行POST。
如果有人點擊某些“包含”值,則可能會嘗試在頁面上過分張貼並取得一些成功。
屬性:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!ViewIsAuthorizedActivity(ActivityName))
{
string requestMethod = filterContext.HttpContext.Request.HttpMethod;
if (requestMethod == "GET")
{
filterContext.Controller.ViewBag.Authorization = "FORBIDDEN";
}
else if (requestMethod == "POST")
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "controller", "Foo" },
{ "action", "Bar" },
{ "area", ""}
});
}
base.OnActionExecuting(filterContext);
}
}
視圖:
@if (ViewBag.Authorization == "FORBIDDEN")
{
ViewBag.Title = "Forbidden!";
@Html.Partial("~/Views/Home/Forbidden.cshtml");
}
else
{
<!-- Page -->
}
偏的是要走的路。 將部分內容添加到您的頁面,如下所示:
@if(ViewData["FORBIDDEN"] == true)
{
<div id="forbidden">
<div/>
}
else{
rest of page here
}
在您的操作中檢查權限並基於它設置ViewData [“ FORBIDDEN”]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.