3 回答
TA贡献1806条经验 获得超5个赞
作为重定向的替代方法,如果它正在调用您自己的代码,则可以使用以下命令:
actionContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(new { controller = "Home", action = "Error" })
);
actionContext.Result.ExecuteResult(actionContext.Controller.ControllerContext);
它不是纯粹的重定向,但会产生类似的结果而没有不必要的开销。
TA贡献1856条经验 获得超5个赞
我正在使用MVC4,我使用以下方法在违反授权时重定向自定义html屏幕。
扩展AuthorizeAttribute说CutomAuthorizer 覆盖OnAuthorization和HandleUnauthorizedRequest
在CustomAuthorizer中注册RegisterGlobalFilters。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomAuthorizer());
}
识别unAuthorized访问呼叫HandleUnauthorizedRequest并重定向到相关的控制器操作,如下所示。
public class CustomAuthorizer : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
bool isAuthorized = IsAuthorized(filterContext); // check authorization
base.OnAuthorization(filterContext);
if (!isAuthorized && !filterContext.ActionDescriptor.ActionName.Equals("Unauthorized", StringComparison.InvariantCultureIgnoreCase)
&& !filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.Equals("LogOn", StringComparison.InvariantCultureIgnoreCase))
{
HandleUnauthorizedRequest(filterContext);
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result =
new RedirectToRouteResult(
new RouteValueDictionary{{ "controller", "LogOn" },
{ "action", "Unauthorized" }
});
}
}
- 3 回答
- 0 关注
- 601 浏览
添加回答
举报