gpt4 book ai didi

web-config - customErrors 和 httpErrors 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-03 04:18:57 25 4
gpt4 key购买 nike

ASP.NET MVC 应用程序中 web.config 文件的 customErrorshttpErrors 部分有什么区别?

每个部分的使用指南是什么?

最佳答案

*2016 年 4 月更新

当.net代码抛出异常(404、403、500等)时,使用customErrors属性;当IIS本身抛出异常时,使用httpErrors属性。

  • /myfakeextensionslessurl --> httpErrors 404
  • /myfakeaspsx.aspx --> 自定义错误 404
  • /myfakeimage.jpg --> httpErrors 404
  • /throw500.apx --> 自定义错误 500
  • /throw500 --> 自定义错误 500

尝试正确配置它会遇到很多陷阱。因此,如果您正在寻找一个简单的示例,那么最好的两个选择是:

示例 1:使用 html 页面

<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.html" />
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="File" path="Error403.html" />
<error statusCode="404" responseMode="File" path="Error404.html" />
<error statusCode="500" responseMode="File" path="Error500.html" />
</httpErrors>
</system.webServer>

示例 2:使用 aspx 页面

<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.aspx" />
<error statusCode="404" redirect="/Error404.aspx" />
<error statusCode="500" redirect="/Error500.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
<error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
<error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
</httpErrors>
</system.webServer>

在 aspx 错误页面中,您需要执行以下操作(例如 404 页面):

<% 
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>

注意:在 customErrors 部分使用无扩展名的 url 是不可能的!(无需黑客攻击)

一种解决方法是禁用自定义错误并让 http 错误处理自定义页面。一个 friend 已经创建了这样的设置,当我有时间时,我将分享代码。

背景

一个好的自定义错误页面将:

  1. 本地访问问题页面时显示真正的异常
  2. 当您远程访问问题页面时显示自定义页面
  3. 不会重定向,而只是显示错误页面内容(由于 seo 原因)
  4. 将显示正确的状态代码

因此,为了澄清我们配置中的一些选项:

  1. <customErrors mode="RemoteOnly" 。您可以在此处指定:On , Off , RemoteOnly .

    • On = 始终显示自定义错误页面
    • Off = 始终显示真正的错误
    • RemoteOnly = 在本地显示错误,但在远程显示自定义错误页面。所以我们想要RemoteOnly对于语句 1
  2. <customErrors redirectMode="ResponseRewrite" 。您可以在此处指定:ResponseRedirectResponseRewriteResponseRedirect模式会将错误页面重定向到自定义错误页面。对于链接爬虫 (SEO),这将导致 302 -> 500,但您希望链接爬虫获得 500 错误。

  3. <httpErrors errorMode="DetailedLocalOnly" 。这相当于 customErrors模式。您拥有的选项:Custom , Detailed , DetailedLocalOnly .

一篇对我帮助很大的好博客文章是:http://benfoster.io/blog/aspnet-mvc-custom-error-pages

关于web-config - customErrors 和 httpErrors 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com