我正在编写一个MVC 5互联网应用程序,我在处理全球异常方面有一个问题。
我的Application_Error设置在我的global.asax文件中。这满足了诸如404 HttpExceptions之类的错误。
如何将控制器中发生的所有错误发送到Application_Error函数?一个例子是以下例外情况:
System.Web.HttpRequestValidationException:从客户端检测到一个潜在危险的Request.Form值(name="")。
我已经为我的控制器编写了一个OnException(ExceptionContext filterContext),但不确定如何获得Application_Error函数来处理这些错误。我需要从OnException函数传递异常,还是这是错误的方法?
提前谢谢。
发布于 2015-03-03 12:59:32
可以通过将以下类添加到App_Start文件夹中来创建全局筛选器:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}可以将HandleErrorAttribute替换为您自己的自定义异常筛选器。
然后,您需要做的就是确保将以下代码行添加到您的App_Start方法的Gloabal.asax中:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//AreaRegistration.RegisterAllAreas();
//RouteConfig.RegisterRoutes(RouteTable.Routes);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
}
}希望这能有所帮助。
发布于 2015-03-03 11:52:41
我正在使用某种http-模块,它给了我确切的您要求的内容:
public class MyModule : IHttpModule {
public void Init(HttpApplication context) {
context.Error += OnRequestError;
}
private void OnRequestError(object sender, EventArgs e) {
var context = ((HttpApplication)sender).Context;
var error = context.Error;
if (error == null)
return;
var errorType = error.GetType();
if (errorType == typeof(HttpException))
// do something
// this is what you are looking for
if (errorType = typeof(HttpRequestValidationException))
// do something, whatever you want
// works for me, so should work to you too
}
}要使模块正常工作,可以使用web.config或DynamicModuleHelper
Microsoft.Web.Infrastructure和WebActivatorEx安装nugetBootstrapper类添加到项目中PreApplicationStartMethod注册模块示例:
// File: Bootstrapper.cs (contains class Bootstrapper)
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using WebActivatorEx;
using WhatEver.It.Is;
[assembly: PreApplicationStartMethod(typeof(Bootstrapper), "Bootstrap")]
namespace WhatEver.It.Is {
public class Bootstrapper {
public static void Bootstrap() {
// Do what do you need just before the application get started
// like registering modules, etc...
DynamicModuleUtility.RegisterModule(typeof(MyModule));
}
}
}https://stackoverflow.com/questions/28830676
复制相似问题