asp.net-mvc – 抛出一个404像StackOverflow的,没有重定向,当使用IOCControllerFactory

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 抛出一个404像StackOverflow的,没有重定向,当使用IOCControllerFactory前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我发现在这里发布了另一个问题,提供了我的问题的第一部分的解决方案,即如何在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

更新

我发错了代码.它是处理这个的IIS 7.

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
         <remove statusCode="404" />
         <error statusCode="404" path="/home/notfound" responseMode="ExecuteURL" />
     </httpErrors>
<system.webServer>

猜你在找的asp.Net相关文章