Azure 门户。 MVC。重定向到自定义错误页面不适用于 403 错误
Azure portal. Mvc. Redirect to custom error page doesn't work for 403 error
我在我的 MVC
应用程序中配置了 owin role-based
授权。
然后,我需要添加自定义处理 403
http error
我知道两种方法:
Web.config
设置:
<customErrors mode="Off" defaultRedirect="~/Error/" redirectMode="ResponseRedirect">
<error statusCode="403" redirect="~/Error/NoAccess" />
</customErrors>
Authorize
属性中覆盖的 HandleUnauthorizedRequest
方法内部的配置:
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 门户上配置此行为,就像我在代码中配置它一样。
有人可以建议一下吗?
我找到了答案。
如果我手动在控制器方法中设置响应代码,就会出现问题,如下所示:
public ActionResult NoAccess()
{
Response.StatusCode = 403;
return View();
}
万一我删除这个状态设置,重定向工作正常。
解决方案是将以下标志设置为真:TrySkipIisCustomErrors
public ActionResult NoAccess()
{
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 403;
return View();
}
然后一切正常。
我在我的 MVC
应用程序中配置了 owin role-based
授权。
然后,我需要添加自定义处理 403
http error
我知道两种方法:
Web.config
设置:<customErrors mode="Off" defaultRedirect="~/Error/" redirectMode="ResponseRedirect"> <error statusCode="403" redirect="~/Error/NoAccess" /> </customErrors>
Authorize
属性中覆盖的HandleUnauthorizedRequest
方法内部的配置: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 门户上配置此行为,就像我在代码中配置它一样。
有人可以建议一下吗?
我找到了答案。 如果我手动在控制器方法中设置响应代码,就会出现问题,如下所示:
public ActionResult NoAccess()
{
Response.StatusCode = 403;
return View();
}
万一我删除这个状态设置,重定向工作正常。
解决方案是将以下标志设置为真:TrySkipIisCustomErrors
public ActionResult NoAccess()
{
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = 403;
return View();
}
然后一切正常。