我尝试从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));
};
}
}
请指教, 感谢
答案 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>