在我的应用程序中,我在Web.config中包含了<customerror>
标记,如下所示:
<customErrors mode="On">
<error statusCode="404" redirect="/Error/404"/>
<error statusCode="403" redirect="/Error/403"/>
<error statusCode="500" redirect="/Error/500"/>
</customErrors>
我在路线配置中创建了一个条目,以便任何带有网址格式 /错误/ {状态} 的请求转到具有状态作为参数的特定控制器操作
我有一个自定义的ActionFilterAttribute,用于检查用户是否为admin,如果没有则返回HTTP 403结果。以下是我的自定义过滤器属性。
public class RequireAdminAttribute: ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (!UserOperations.IsAdmin())
{
filterContext.Result = new Http403Result();
}
}
}
internal class Http403Result : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
// Set the response code to 403.
context.HttpContext.Response.StatusCode = 403;
}
}
现在,如果用户未获得授权,我需要将其重定向到 / Error / 403 页面。当我运行我的应用程序时,我的applition在403错误发生时不会重定向到错误页面。如果发生404错误,则会重定向到给定的404错误页面(大多数情况下会发生404错误)。这是什么原因?任何人都可以给我一个解决方案吗?我是否需要使用RedirectToRouteResult
?
修改:
在某些情况下,重定向在我明确使用return HttpNotFound();
结果的地方不起作用。我想知道使用return HttpNotFound();
是否不会重定向到自定义页面。
谢谢。
答案 0 :(得分:3)
尝试将此添加到您的Web.config
:
<system.webServer>
<httpErrors existingResponse="Replace" errorMode="Custom" defaultResponseMode="Redirect">
<remove statusCode="403"/>
<error responseMode="ExecuteURL" statusCode="403" path="/Error/403" />
</httpErrors>
</system.webServer>