gpt4 book ai didi

asp.net - IIS 7错误代码

转载 作者:行者123 更新时间:2023-12-03 09:00:46 24 4
gpt4 key购买 nike

我正在IIS 7上运行Sitefinity CMS网站。当我尝试返回404状态时,看到了一些奇怪的结果。

如果我转到如下网址:

www.mysitefinitywebsite.com/test.co.uk(我知道这是一个无效地址,但是有人将其输入了CMS)

由于上面的内容不是ASPX页面,因此我相信IIS使用以下代码处理了该错误:

    <httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
</httpErrors>

地址栏中的url保持不变,显示了我的自定义404页面(/404.aspx)页面,但是返回了HTTP状态代码200。

但是,如果键入以下URL:

www.mysitefinitywebsite.com/test.aspx-使用以下配置启动ASPX错误处理程序:
<customErrors mode="On" >
<error redirect="~/Sitefinity/nopermissions.aspx" statusCode="403" />
<error redirect="~/404.aspx" statusCode="404" />
</customErrors>

再次显示我的自定义404页面,但是地址栏中的网址更改为:

www.mysitefinitywebsite.com/404.aspx?aspxerrorpath=/test.aspx

而且奇怪的是,如果我检查Firebug,则为text.aspx返回302代码,然后为/404.aspx?aspxerrorpath=/test.aspx返回200状态。

我不完全了解这里发生的情况,似乎IIS根本不响应状态码-这是设计使然吗?似乎完全疯了!

如果是设计使然,那么解决该问题的唯一方法就是以编程方式返回正确的响应代码?

提前致谢
higgsy

最佳答案

当您使用<httpErrors>元素和executeUrl时,您正在提供动态内容。如果该内容未明确返回状态代码(asp.net,asp等页面),则需要根据需要将existingResponse属性设置为auto/replace/passthrough。

目的是Web服务器可能有一般性错误,您可能需要向客户端返回不同或扩展的错误代码。对于API,您可能希望404包含/返回有关未找到的内容的更多信息,等等,这更有意义。

看看httpErrors上的IIS.NET文档中的existingResponse标志

http://www.iis.net/ConfigReference/system.webServer/httpErrors

对于ASP.NET,默认行为是发生错误时重定向302,这是您所看到的。在您正重定向到的页面上,以编程方式设置响应的状态代码时,将返回404页面。

差异仅仅是由处理引起的。首先,您允许IIS在执行ASP.NET管道之前处理错误。在第二个中,IIS传递到ASP.NET管道。他们是两种不同的技术,因此有两种不同的行为。放心研究一下,您可以让他们俩都做同样的事情。

关于asp.net - IIS 7错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205212/

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