自定义错误重定向在ASP.NET MVC Web.Config中不起作用

时间:2014-04-08 09:02:21

标签: asp.net-mvc custom-error-pages

在我的应用程序中,我在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();是否不会重定向到自定义页面。

谢谢。

1 个答案:

答案 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>