我发现在这里发布了另一个问题,提供了我的问题的第一部分的解决方案,即如何在ASP.NET MVC中生成404页面,而不重定向到另一个页面(因此最初请求的URL保留在地址栏中).
ASP.NET MVC – How to throw a 404 page similar to that on StackOverflow
protected void Application_Error(object sender,EventArgs e) { var exception = Server.GetLastError(); Response.Clear(); var httpException = exception as HttpException; var routeData = new RouteData(); routeData.Values.Add("controller","Error"); if (httpException != null) { routeData.Values.Add("action",httpException.GetHttpCode() == 404 ? "NotFound" : "Unknown"); // clear the error,otherwise,we will always get the default error page. Server.ClearError(); // call the controller with the route IController errorController = new ErrorController(); errorController.Execute(new RequestContext(new HttpContextWrapper(Context),routeData)); } }
如果我不使用IOCControllerFactory,404的一些事情对我来说可以正常工作,但是一旦我使用工厂,global.asax中的错误代码就不会被使用,而是得到以下错误:
The IControllerFactory ‘MyNamespace.IOCControllerFactory’ did not
return a controller for the name ‘blah’.
解决方法
ASP.NET
can do这个OOTB(从3.5开始).
在< CustomErrors>元素add:redirectMode = ResponseRewrite
在< CustomErrors>元素add:redirectMode = ResponseRewrite
更新
我发错了代码.它是处理这个的IIS 7.
<system.webServer> <httpErrors errorMode="Custom" existingResponse="Replace"> <remove statusCode="404" /> <error statusCode="404" path="/home/notfound" responseMode="ExecuteURL" /> </httpErrors> <system.webServer>