当我手动设置我的响应stream的HTTP Status为404或503 ,IIS呈现股票IIS内容/视图,而不是我的自定义视图。
当我用Web开发服务器(AKA。Cassini)做这件事时,它能正常工作(也就是说,我的内容被显示, response.statuscode ==我input的数据)。
有什么办法可以重写这种行为?
制作一个默认的ASP.NET MVC1 web应用程序。 添加以下路线
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", "{*catchall}", new { controller = "Home", action = "Index" } ); }
现在使用…replaceHomeController的Index方法
[HandleError] public class HomeController : Controller { public ActionResult Index() { Response.StatusCode = 404; return View(); } }
好 – find答案。 正如我所料,IIS正在劫持我的非200响应。 不知道(即我不知道这是默认行为,还是因为在机器configuration中更新了一个团队成员,等等)。
无论如何,这里的关键是告诉IIS 不处理任何非200状态结果资源。
怎么样? 在web.config中configuration条目。
<system.webServer> <httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"/> .... snipped other IIS relevant elements ... </system.webServer>
现在,这里的关键是existingResponse="PassThrough" 。 如果HTTP状态码!= 200,那么这个坏男孩会告诉IIS让我的资源独自一人。
想要更多信息? 当然: 在官方IIS网站上了解更多关于这个元素的信息 。
另一种绕过这个的方法是在你的ASP应用程序中运行下面的代码:
Response.TrySkipIisCustomErrors = true;
资料来源: https : //stackoverflow.com/a/21271085/238753
一般来说,要小心这种方法。 您不应该呈现404状态的视图。
我想当返回错误状态码时,IIS返回注册的状态错误页面 – 而不是处理的输出。 所以,你可以把一个HTML页面(或一个链接到一个aspx页面)。 http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx有一个很好的解释如何设置一个错误页面。
但是这是无关紧要的。 相当多的浏览器默认情况下不显示输出,但在浏览器中设置。 所以,如果你依靠人们看到你的404页面 – 这可能不会发生。 他们可能会看到为浏览器设置的404页面。