0

我已经在我的应用程序中配置了 owinrole-based授权MVC。然后,我需要添加一个自定义处理403http 错误

我知道两种方法:

  1. Web.config设置:

    <customErrors mode="Off" defaultRedirect="~/Error/" redirectMode="ResponseRedirect">
     <error statusCode="403" redirect="~/Error/NoAccess" />
    </customErrors>
    
  2. 属性中重写HandleUnauthorizedRequest方法内部的配置:Authorize

    if (filterContext.HttpContext.User?.Identity.IsAuthenticated ?? false)
    {
       filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary
       {
         {"action", "NoAccess"},
         {"controller", "Error"}
       });
       //I've tried two variants of below: with below line as well as without it 
       filterContext.Result.ExecuteResult(filterContext.Controller.ControllerContext);
    }
    

当我尝试访问我的用户不允许的资源并且我看到我的自定义页面403出错时,这两种方法在我的本地机器上都运行良好,但是当我在门户上部署我的应用程序时azure,我只看到带有以下文本:“您无权查看此目录或页面。” . 据我所知,我需要在 azure 门户上配置此行为,并在我的代码中对其进行配置。

有人可以建议吗?

4

1 回答 1

1

我找到了答案。如果我在控制器方法中手动设置响应代码,则会出现问题,如下所示:

public ActionResult NoAccess()
{
    Response.StatusCode = 403;
    return View();
}

如果我删除此状态设置,重定向工作正常。解决方案是将以下标志设置为 true:TrySkipIisCustomErrors

 public ActionResult NoAccess()
 {
     Response.TrySkipIisCustomErrors = true;
     Response.StatusCode = 403;

     return View();
 }

然后一切正常。

于 2018-04-05T14:16:25.030 回答