我有一个奇怪的问题,或者是一个预期的问题(我没有得到它)。
我编写了一个异常过滤器,因此它可以捕获一个特定的异常并将该异常消息添加到ModelState(以避免在控制器中使用try / catch块)。
我遇到的问题是,当异常发生时,我得到一个空白屏幕而不是视图。它似乎不会继续留在我认为它应该在控制器中的位置。
过滤器:
public class ValidationFilter : ExceptionFilterAttribute
{
public override void OnException(ExceptionContext context)
{
context.ExceptionHandled = true;
context.ModelState.AddModelError("", context.Exception.Message);
}
}
答案 0 :(得分:1)
对我来说似乎很合乎逻辑。如果您在此处执行异常处理,则需要确保作为响应返回的内容,因为流已中断。
我想这是一个正在发生的事情的模型:
try
{
var model = SomeMethodThatThrowsException();
return View(model);
}
catch
{
}
现在,如果第一行抛出异常,除非你在那里处理并告诉它该做什么,它怎么能继续返回一个视图?
我不是百分之百确定它不可能做你想要的,但这似乎是合乎逻辑的(至少在使用以前版本的ASP.NET之后)流程。
可能的解决方案
public void MyAction()
{
MyModel model = ExecuteSafely(SomeMethodThatThrowsException());
return View(model);
}
private MyModel ExecuteSafely(Func<MyModel> action)
{
try
{
return action();
}
catch
{
// Add what you need to a model/view/etc. here
return null;
}
}
这是一些例子,因此不可能编译,但只是说明我的意思。