web.config文件中的自定义错误页面未涵盖所有URL路径

时间:2013-05-06 03:15:56

标签: asp.net asp.net-mvc iis web-config

在我的web.config文件中,我指定了一些自定义错误:

<customErrors mode="RemoteOnly" defaultRedirect="~/Error">
   <error statusCode="500" redirect="~/Error" />
   <error statusCode="404" redirect="~/NotFound" />
</customErrors>

现在,某些链接(例如http://mysite.com/dsflhsdff)会被正确地重定向到mysite.com/notfound。但有些链接,如https://mysite.com/videoconference/0/0/0由服务器本身处理 - 而不是我的自定义错误页面,我收到IIS错误页面(找不到文件或目录)。例如,此链接 - https://scyk.pl/forums/0/0/0将产生正确的404错误(我的自定义错误页面)。

这里发生了什么?我是否需要手动设置IIS自定义错误?如果是这样,我该怎么做?

4 个答案:

答案 0 :(得分:1)

这是因为ASP.NET甚至不知道有.htm页面的请求。 IIS将自行处理.htm页面,而根本不涉及ASP.NET。

您可以通过以下两种方式之一显示自定义页面:

让ASP.NET处理.htm页面:在IIS中右键单击您的网站/虚拟目录 - &gt;属性 - &gt;主目录/虚拟目录选项卡 - &gt; “应用程序设置”部分下的“配置”按钮 - &gt;添加映射。 设置IIS的自定义错误页面:在IIS中右键单击您的网站/虚拟目录 - &gt;属性 - &gt;自定义错误标签 - &gt;将404错误设置为错误页面的页面。

答案 1 :(得分:1)

您还可以在 Application_Error 方法

中的Global.asax文件中处理此错误

e.g。

  void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs
        Exception exc = Server.GetLastError();

        // Handle HTTP errors
        if (exc.GetType() == typeof(HttpException))
        {
            // The Complete Error Handling Example generates
            // some errors using URLs with "NoCatch" in them;
            // ignore these here to simulate what would happen
            // if a global.asax handler were not implemented.
            /*if (exc.Message.Contains("NoCatch") || exc.Message.Contains("maxUrlLength"))
                return;*/

            //Redirect HTTP errors to HttpError page
            /*Server.Transfer("HttpErrorPage.aspx");*/
        }
    }

更多信息: http://www.asp.net/web-forms/tutorials/aspnet-45/getting-started-with-aspnet-45-web-forms/aspnet-error-handling

答案 2 :(得分:0)

如果页面调用未通过asp.net引擎,那么IIS将处理。

您可以执行此操作setup very easy if you have direct access to the iis,但IIS允许您直接从站点的web.config设置此自定义错误。以下是404错误的示例:

<system.webServer>
    <httpErrors>
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/PageNotFound.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

更多信息:http://www.iis.net/configreference/system.webserver/httperrors

答案 3 :(得分:0)

这种情况正在发生,因为IIS在某些情况下无法找到您的自定义错误页面。我遇到了某些扩展,但通过在IIS管理器的错误页面部分配置我的自定义错误页面,我每次都能够点击我的自定义错误页面。

Heres怎么做:

进入您的IIS管理器并选择相关网站,找到标题为“错误页面”的图标。在IIS部分下。

双击该图标后,您将看到一个状态代码列表以及负责传递错误的相应文件。

找到错误代码,在您的情况下为404(如果它不存在,您可以通过单击&#39;添加...&#39;)从右侧菜单添加它,然后单击&# 39;编辑...&#39;右侧菜单中的按钮。

接下来,点击“在此网站上执行网址”的单选按钮&#39;在您出现的对话框中。您可以在此处提供用户将重定向到的相对URL。

在“编辑”对话框中完成选项后,您将需要再次在主页错误页面中选择您的页面,这次只需点击“编辑功能设置...”即可。

在您看到的编辑错误页面设置中,确保针对远程请求的本地请求和自定义错误页面的详细错误&#39;被选中。还要确保在“编辑错误页面”对话框的“默认页面”部分的“路径”字段中输入您在上一个“编辑”菜单中输入的页面。最后,路径类型必须设置为&#39;执行网址