Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc IIS显示服务器错误而不是自定义错误_Asp.net Mvc_Iis_Server Error - Fatal编程技术网

Asp.net mvc IIS显示服务器错误而不是自定义错误

Asp.net mvc IIS显示服务器错误而不是自定义错误,asp.net-mvc,iis,server-error,Asp.net Mvc,Iis,Server Error,我正在使用MVC5,我正在使用一个自定义的错误视图来处理我的错误,例如(404403..等等) 它在本地IIS上运行良好,但当我在登台服务器上发布时,它会显示有关这些错误代码的IIS服务器错误消息 它将显示以下消息: public ActionResult Index(string id) { if (!string.IsNullOrEmpty(id) && id.Equals("404")) { Respo

我正在使用MVC5,我正在使用一个自定义的错误视图来处理我的错误,例如(404403..等等) 它在本地IIS上运行良好,但当我在登台服务器上发布时,它会显示有关这些错误代码的IIS服务器错误消息

它将显示以下消息:

    public ActionResult Index(string id)
    {
        if (!string.IsNullOrEmpty(id) && id.Equals("404"))
        {
            Response.StatusCode = 404;
            return !Request.IsAjaxRequest() ? (ActionResult)View("404") : PartialView("404");
        }
        if (!string.IsNullOrEmpty(id) && id.ToLower().Equals("403"))
        {
            Response.StatusCode = 403;
            return !Request.IsAjaxRequest() ? (ActionResult)View("Security") : PartialView("Security");
        }
        return !Request.IsAjaxRequest() ? (ActionResult)View("Index") : PartialView("Index");
    }

而不是:

    public ActionResult Index(string id)
    {
        if (!string.IsNullOrEmpty(id) && id.Equals("404"))
        {
            Response.StatusCode = 404;
            return !Request.IsAjaxRequest() ? (ActionResult)View("404") : PartialView("404");
        }
        if (!string.IsNullOrEmpty(id) && id.ToLower().Equals("403"))
        {
            Response.StatusCode = 403;
            return !Request.IsAjaxRequest() ? (ActionResult)View("Security") : PartialView("Security");
        }
        return !Request.IsAjaxRequest() ? (ActionResult)View("Index") : PartialView("Index");
    }

我已经修改了

Global.asax

        if ((Context.Server.GetLastError() is UnauthorizedAccessException))
        {
            log.LogError(Context.Server.GetLastError().Message, Context.Server.GetLastError());
            customErrorPage = @"~/Error/?id=403"; //security
        }
        else if ((Context.Server.GetLastError() is HttpException) && (((HttpException)Context.Server.GetLastError()).GetHttpCode() == 404))
        {
            //** Handle 404 error and response code
            log.LogError("404", Context.Server.GetLastError());
            customErrorPage = @"~/Error/?id=404";
        }
        else
        {
            log.LogError(Context.Server.GetLastError().Message, Context.Server.GetLastError());
            customErrorPage = @"~/Error";
        }

        if (ConfigurationHelper.Common.ShowCustomErrorPage)
        {
            var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
            Response.Redirect(urlHelper.Content(customErrorPage), false);
            Server.ClearError();
        }
错误控制器:

    public ActionResult Index(string id)
    {
        if (!string.IsNullOrEmpty(id) && id.Equals("404"))
        {
            Response.StatusCode = 404;
            return !Request.IsAjaxRequest() ? (ActionResult)View("404") : PartialView("404");
        }
        if (!string.IsNullOrEmpty(id) && id.ToLower().Equals("403"))
        {
            Response.StatusCode = 403;
            return !Request.IsAjaxRequest() ? (ActionResult)View("Security") : PartialView("Security");
        }
        return !Request.IsAjaxRequest() ? (ActionResult)View("Index") : PartialView("Index");
    }

如何显示自定义错误消息?

只需添加以下
web.config
配置即可通过IIS默认错误处理行为

<configuration>
    <system.webServer>
        <httpErrors existingResponse="PassThrough" />
    </system.webServer>
</configuration>

尝试使用

Response.TrySkipIisCustomErrors = true;
在你的控制器上。 这比那本书好

<httpErrors existingResponse="PassThrough" />


由于
传递
可能会导致一些您并不总是期望的结果。例如,阅读如果模块未设置任何文本,它将如何使自定义错误模块返回空白响应。

这非常有效,但它将完全删除IIS 404级错误处理。如果您有一个未由ASP.NET引擎处理的URL,它将不会返回404未找到错误。