.net中自定义错误页面的实现升级篇

2019-05-25 12:51:25于海丽

第三步:按照 上上一篇博文:.net捕捉全局未处理异常的3种方式 的步骤实现全局异常为处理相关操作设置

第四步:在扑捉全局未处理的异常中,添加上针对post请求的异常处理过滤(直接输入封装后的),具体代码如下:

/// <summary>
 /// 异常处理
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 public void context_Error(object sender, EventArgs e)
 {
  //此处处理异常
  HttpContext ctx = HttpContext.Current;
  HttpResponse response = ctx.Response;
  HttpRequest request = ctx.Request;

  //获取到HttpUnhandledException异常,这个异常包含一个实际出现的异常
  Exception ex = ctx.Server.GetLastError();
  //实际发生的异常
  Exception iex = ex.InnerException;

  //// 异常日志落地
  //// 异常日志落地包括:记录异常文本文件日志、或者记录异常日志数据库等等(根据实际项目需要做记录)

  //// 获取请求方法
  string httpMethod = request.HttpMethod;
  //// 如果是POST请求,那么是以下请求之一
  //// ajax接口请求
  //// form表单提交
  //// 这种情况的异常,不用跳转至自已的异常错误页面,直接返回对应系统异常
  if (httpMethod.ToUpper() == "POST")
  {
  //// 构建返回对象值
  MRequestResult requestResultM = new MRequestResult();
  requestResultM.RequestResultCode = RequestResultCodeEnum.Fail;
  requestResultM.ResultValue = "系统异常,请联系管理员!";

  response.Write(JsonConvert.SerializeObject(requestResultM, Formatting.Indented));
  ctx.Server.ClearError();//处理完及时清理异常
  }
 }

代码实例:

ajax请求方法及其逻辑处理实例代码:

$(function () {
 $.ajax({
  async: true,
  type: "post",
  url: "../ActionTestResult/ContentResultTest",
  data: "name=xu",
  success: function (resultValue) {

  if (resultValue) {
   //// 解析处理结果
   var resultObj = $.parseJSON(resultValue);

   //// 当RequestResultCode==1 说明该请求成功
   ////(备注:并不代表处理成功,具体是否处理成功需要通过ResultValue的值根据接口约定解析做相应的逻辑处理)
   if (resultObj["RequestResultCode"] == 1) {
   //// 自定义请求成功逻辑处理
   //// 通过解析具体的ResultValue的值做相应的逻辑处理.....
   if (resultObj["ResultValue"]) {
    var doResult = resultObj["ResultValue"].split('^');
    if (doResult && doResult.length > 1) {
    if (doResult[0] == 1) {
     //// 说明处理成功,做相应的逻辑处理
     alert("处理成功!");
    } else {
     //// 处理失败
     alert(doResult[1]);
    }

    } else {
    alert("操作失败!");
    }

   } else {
    alert("未知结果");
   }

   } else {
   //// 说明请求异常
   //// 自定义逻辑处理
   alert(resultObj["ResultValue"]);
   }
  } else {
   //// 自定义逻辑处理
   alert("操作失败!");
  }

  console.log(resultValue);
  },
  error: function (data) {
  //// 自定义逻辑处理
  alert("系统异常,请联系管理员。电话:8888888");
  console.log(data);
  }
 });
 });