ASP.NET MVC 5-返回特殊错误页面,而不是自定义错误页面

时间:2018-10-17 14:10:15

标签: c# asp.net-mvc web-config custom-error-pages custom-errors

我不确定我的问题的标题。我需要为404、500等常见错误设置自定义错误页面,但是对于特定错误,我还需要自己的“特殊”错误页面。

我配置了由IIS提供的自定义错误页面,如下所示,它工作正常。发生了某些情况,引发了错误500,并提供了/Error/InternalServerError并保留了原始URL。

但是,如果我访问/Error/Special,则会遇到问题。如果将状态码设置为500,我将得到错误页面/Error/InternalServerError的内容,而不是内容  /Error/Special的状态代码为500。TrySkipIisCustomErrors = true由于web.config而无法使用。

我的web.config中有这个文件:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <clear/>
  <error statusCode="500" path="/Error/InternalServerError" responseMode="ExecuteURL" />
</httpErrors>

这个控制器:

public class ErrorController : Controller
{
    // special error page
    public ActionResult Special()
    {
        //Response.StatusCode = (int)HttpStatusCode.InternalServerError; // <- I cant set status code because IIS returns error page (custom error page) instead
        //Response.TrySkipIisCustomErrors = true; // <- needs httpErrors - existingResponse="Passthrough" but custom error pages are not working with it
        return View();
    }

    public ActionResult InternalServerError()
    {
        Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        return View();
    }
}

为什么我需要“特殊”错误页面?我想做这样的事情:

public class SpecialController : Controller
{      
    public SpecialController()
    {
        // something
    }

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if ( something != true )
        {
            // it would be nice to do it without redirect, just return /Error/Special and stop executing original request
            filterContext.Result = new RedirectToRouteResult(
                        new RouteValueDictionary
                        {
                            { "action", "Special" },
                            { "controller", "Error" }
                        });
        }
    }
}

我想念什么吗?

1 个答案:

答案 0 :(得分:0)

我认为该博客可以为您提供帮助。几年前对我有用。

http://benfoster.io/blog/aspnet-mvc-custom-error-pages