asp.net-mvc – ASP.NET MVC中的通用基本控制器错误处理问题
发布时间:2020-05-24 13:53:18 所属栏目:asp.Net 来源:互联网
导读:我的基本控制器中有一个可以处理我无法捕获的错误的捕获.它大致如下: protected override void OnException(ExceptionContext filterContext){ // Bail if we cant do anything if (filterContext == null) return; // log
|
我的基本控制器中有一个可以处理我无法捕获的错误的捕获.它大致如下: protected override void OnException(ExceptionContext filterContext)
{
// Bail if we can't do anything
if (filterContext == null)
return;
// log
var ex = filterContext.Exception ??
new Exception("No further information exists.");
LogException(ex);
filterContext.ExceptionHandled = true;
var data = new ErrorPresentation
{
ErrorMessage = HttpUtility.HtmlEncode(ex.Message),TheException = ex
};
filterContext.Result = View("Error",data);
base.OnException(filterContext);
}
现在,如果控制器中发生错误,这可以很好地工作.问题是,如果错误发生在aspx页面呈现期间(例如,在HtmlHelper方法中),则会在发生错误的页面上呈现整个错误视图.这意味着整个错误页面(MasterPage和all)都会在错误的页面中呈现.不完全是预期的行为. 我已经尝试将View更改为RedirectToAction,但这不起作用,因为每个控制器都不存在路由(Home / Error,Configuration / Error等). 如何才能使控制器中的错误和页面上的错误都能正常工作? 解决方法您需要一种方法来跟踪页面所处的状态,以便您可以区分是否正在执行操作 – 在这种情况下您要替换结果 – 或执行结果 – 在这种情况下您要丢弃响应的内容并为错误执行新的ViewResult.在基本控制器中保留标志将是处理此问题的一种方法.您也可以根据异常类型判断.我不确定会有多可靠.一旦你弄清楚你可以做的状态: var view = View("Error",data );
if (executingResult)
{
filterContext.HttpContext.Response.ClearContent();
view.ExecuteResult();
}
else
{
filterContext.Result = view;
base.OnException( filterContext );
}
评论:一般来说,我不主张这样做.我认为您的控制器操作应该向View保证它需要的所有数据都存在,或者您的View应该以防御方式编写,以确保不会发生异常(特别是NullReferenceExceptions). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.NET MVC 2 – Html.DropDownList与View
- asp.net – 在没有完全回发的情况下,在AJAX更新面板中上传文
- asp.net – Glimpse手动分析a MiniProfiler?
- asp.net-mvc – Visual studio – 预编译 – 无点
- .net – MVC3 HttpPostedFileBase首先上传没有数据,但后来做
- asp.net-mvc-3 – 从ASP的Ajax.ActionLink获取JSonResult
- asp.net-mvc – MVC的编码标准 – 它们是官方的吗?
- asp.net – 创建新的实体数据模型的麻烦
- 使用AspNetPager与GridView完成分页
- asp.net-mvc-3 – 在MVC中设置403错误页面
推荐文章
站长推荐
- asp.net-mvc – 在ASP.NET MVC中以HTML格式呈现R
- WPF中ComboBox绑定数据库自动读取产生数据
- asp.net – 如何通过web.config文件中的Access-C
- asp.net-mvc – 从Asp.net MVC发送HTML电子邮件的
- asp.net-mvc – ASP.Net MVC 3:反向授权属性
- asp.net-mvc – AngularJS无法在发布模式下工作(
- 如何从ASP.NET中的Web请求返回pdf?
- Asp.net – 空QueryString参数
- asp.net – 如何检查SQL Server代理是否正在运行
- asp.net-mvc – 在asp.net mvc中实现stackoverfl
热点阅读
