我想处理应用程序范围错误并在asp.net mvc中显示ErrorView页面.有3种方法可以做到(或者我知道).
1) ErrorAttribute in BaseController:Controller class.
Can be used on individual Action/Controller/BaseController.
2) Override OnException() in the BaseController:Controller class.
Will work on Controllers derived from BaseController
3) Application_Error in Global_aspx.
Run Code Online (Sandbox Code Playgroud)
什么是最佳做法.这些方法中的哪一个应该用于应用程序范围的错误处理,或者我们应该使用多个还是仅使用一个.
如果我们在BaseController上处理ErrorAttribute或/和OnException()的错误,我们仍然应该在Application_Error()中处理它.
我们什么时候应该使用Application_Error()?
我有一个基本控制器类,我将覆盖Controller.OnException处理程序方法,以便为将继承此类的某些类型的控制器提供一般错误处理(这些控制器将返回JSON结果).当控制器引发异常时,永远不会调用OnException方法.有谁看到我做错了什么,还是有更好的方法来处理这种情况?
使用MVC 1.0
基类:
public class APIController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
//This is never called
filterContext.Result =
new JsonResult();
base.OnException(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
继承类:
public class MyController : APIController
{
public AjaxResult ForcedException()
{
throw new SystemException();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个MVC.NET 2.0项目,我试图在控制器的OnException方法中放入一些特殊的错误处理逻辑.基本上我希望能够确定引发未处理异常的控制器方法的结果类型,以便我可以以某种格式返回错误数据,具体取决于类型(JsonResult的json和ActionResult的html).有人能指出我确定这种类型的方法吗?我非常感谢任何帮助.
提前致谢
情况是这样的:
我无法找到一种方法来获取viewModel
传递给POST操作方法的方法.
[HttpPost]
public ActionResult Edit(SomeCoolModel viewModel)
{
// Some Exception happens here during the action execution...
}
Run Code Online (Sandbox Code Playgroud)
在OnException
控制器的overridable内:
protected override void OnException(ExceptionContext filterContext)
{
...
filterContext.Result = new ViewResult
{
ViewName = filterContext.RouteData.Values["action"].ToString(),
TempData = filterContext.Controller.TempData,
ViewData = filterContext.Controller.ViewData
};
}
Run Code Online (Sandbox Code Playgroud)
调试代码时filterContext.Controller.ViewData
,null
自代码执行时发生异常并且未返回任何视图.
无论如何,我看到它filterContext.Controller.ViewData.ModelState
已经填满并具有我需要的所有值,但我没有完整的ViewData => viewModel
对象可用.:(
我想回到同一个View
与发布data/ViewModel
给用户在一个中心点.希望你得到我的漂移.
为实现目标,还有其他方法可以遵循吗?
我想从路线中捕捉所有异常.
我添加了这个OnExeption:
onException(Exception.class).process(new MyFunctionFailureHandler()).stop();
Run Code Online (Sandbox Code Playgroud)
然后,我创建了类MyFunctionFailureHandler.
public class MyFunctionFailureHandler implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
Throwable caused;
caused = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
exchange.getContext().createProducerTemplate().send("mock:myerror", exchange);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用,我不知道为什么.
如果有异常,程序必须停止.
我怎么知道为什么这段代码不起作用!!
谢谢.
我想记录delphi应用程序中引发的每个异常.为此,我在项目源代码中用我自己的一个覆盖了Application.OnException事件.
program Project;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Logger in 'Logger.pas',
JCLDebugHandler in 'JCLDebugHandler.pas';
{$R *.res}
begin
Application.Initialize;
Application.OnException := TApplicationException.AppException;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
这很好用,但我没有抓住这个解决方案,在try-except块中捕获了异常.
当在except块中捕获异常时,它不会触发Application.OnException事件.
有没有办法首先在Application.OnException事件而不是except块中捕获它?
onexception ×6
asp.net-mvc ×4
controller ×2
apache ×1
c# ×1
delphi ×1
esb ×1
exception ×1
java ×1
model ×1
try-catch ×1