asp.net mvc 2,httpmodule routedata重定向

时间:2011-08-11 17:38:14

标签: asp.net-mvc

我尝试从w / i httpmodule重定向。我有以下代码,并连接到httpModules部分。按预期触发此错误事件,但这不会转到/ Error / Index页面。

public class MyHttpModule : IHttpModule {
    public void Dispose() { }

    public void Init(HttpApplication context) {

        context.Error += delegate {
            var exception = context.Server.GetLastError();
            context.Response.Clear();
            context.Response.TrySkipIisCustomErrors = true;
            context.Server.ClearError();

            var routeData = new RouteData();
            routeData.Values.Add("controller", "Error");
            routeData.Values.Add("action", "Index");

            IController errorController = new ErrorController();
            errorController.Execute(new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData));
        };
    }
}

请指教, 感谢

1 个答案:

答案 0 :(得分:1)

我创建了一个新的ASP.NET MVC 2和ASP.NET MVC 3应用程序。

我添加了一个新的HttpModule并复制/粘贴了你的代码。

我在Web.config中注册了新的HttpModule。

<?xml version="1.0"?>
<configuration>
    <system.web>
        <httpModules>
            <add name="MyHttpModule" 
                 type="MvcApplication.MyHttpModule, MvcApplication" />
        </httpModules>
    </system.web>
</configuration>

我在我的控制器的一个动作方法中抛出异常,例如:

throw new InvalidOperationException("An exception occured.");

每当发生未处理的异常时,我都会被重定向到错误/索引页面而没有问题。

您是否正确注册了HttpModule?如果模块未正确注册,我只会得到描述的行为。请记住,对于Visual Studio开发Web服务器(Cassini)和IIS 7.X,您需要在Web.config的不同部分注册HttpModule。

对于IIS 7.X,请使用:

<?xml version="1.0"?>
<configuration>
    <system.webServer>
        <modules>
            <add name="MyHttpModule" 
                 type="MvcApplication.MyHttpModule, MvcApplication" />
        </modules>
    </system.webServer>
</configuration>