如果我手动设置Response.StatusCode,IIS重写我的响应内容

问题

当我手动设置我的响应stream的HTTP Status404503 ,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状态的视图。