为了账号安全,请及时绑定邮箱和手机立即绑定

customErrors和httpErrors有什么区别?

customErrors和httpErrors有什么区别?

呼如林 2019-08-26 14:10:41
customErrors和httpErrors有什么区别?是什么之间的区别customErrors,并httpErrors在ASP.NET MVC应用程序的web.config文件的部分?使用每个部分的准则是什么?
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

* 2016年4月更新

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

  • / myfakeextensionslessurl - > httpErrors 404

  • /myfakeaspsx.aspx - > customErrors 404

  • /myfakeimage.jpg - > httpErrors 404

  • /throw500.apx - > customErrors 500

  • / throw500 - > customErrors 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错误处理自定义页面。朋友创建了这样的设置,当我找到一些时间时,我会分享代码。

背景

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

  1. 在本地访问问题页面时显示真实的异常

  2. 远程访问问题页面时显示自定义页面

  3. 不会重定向,而只是显示错误页面内容(因为seo原因)

  4. 将显示正确的状态代码

所以要澄清我们的配置中的一些选项:

  1. <customErrors mode="RemoteOnly"。您可以指定在这里:OnOffRemoteOnly

    • On =始终显示自定义错误页面

    • Off =始终显示真实的错误

    • RemoteOnly=在本地显示错误,但远程显示自定义错误页面。所以我们想要RemoteOnly声明1

  2. <customErrors redirectMode="ResponseRewrite"。你可以在这里指定:ResponseRedirectResponseRewrite。该ResponseRedirect模式将错误页面重定向到自定义错误页面。对于链接爬虫(SEO),这将导致302 - > 500,但您希望链接爬虫获得500错误。

  3. <httpErrors errorMode="DetailedLocalOnly"。这相当于customErrors模式。选择您有:CustomDetailedDetailedLocalOnly

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


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 710 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信