我发现这里发布的另一个问题提供了我问题第一部分的解决方案,即如何在ASP.NET MVC中生成404页面 WITHOUT 重定向到另一个页面(所以最初请求的网址仍保留在地址栏中。)
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
中的错误代码不是使用,而是我收到以下错误:
IControllerFactory'MyNamespace.IOCControllerFactory'没有 返回一个名为'blah'的控制器。
如何解决这个问题,而不是试图摆脱我的controllerfactory,并为每个控制器创建一个无参数构造函数?
答案 0 :(得分:12)
ASP.NET can do这个OOTB(从3.5开始)。
在<CustomErrors>
元素上添加: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>