最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net中自定義錯(cuò)誤頁(yè)面的實(shí)現(xiàn)升級(jí)篇

 更新時(shí)間:2018年06月03日 15:19:15   作者:猴子哥  
這篇文章主要給大家介紹了關(guān)于.net中自定義錯(cuò)誤頁(yè)面實(shí)現(xiàn)的相關(guān)資料,這篇文章是之前的升級(jí)篇,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

問題描述:

在上一篇博文 “.net自定義錯(cuò)誤頁(yè)面實(shí)現(xiàn)” 中已經(jīng)介紹了在.net中如何實(shí)現(xiàn)自定義錯(cuò)誤頁(yè)面實(shí)現(xiàn)(有需要者可以去上一篇博文了解),單純按照上一篇博文那樣設(shè)置,能夠?qū)崿F(xiàn)所有請(qǐng)求的異常自定義跳轉(zhuǎn),但是這樣又會(huì)產(chǎn)生一個(gè)問題:當(dāng)通過ajax提交請(qǐng)求獲取接口提交請(qǐng)求,如果出現(xiàn)未處理的異常也會(huì)被重定向到自定義錯(cuò)誤頁(yè)面。

針對(duì)ajax請(qǐng)求或者接口請(qǐng)求,這樣返回一個(gè)重定向頁(yè)面,用戶體驗(yàn)顯然不是太友好,針對(duì)這個(gè)問題,下面簡(jiǎn)單總結(jié)一下我自己的想法和解決方案,當(dāng)然不一定科學(xué)和合理,所以也希望有大牛多多指點(diǎn)。

解決思路,我想到的有二:

解決方案一:

從物理結(jié)構(gòu)上分割,將web項(xiàng)目嚴(yán)格分割成兩個(gè)項(xiàng)目(當(dāng)然可根據(jù)需要繼續(xù)細(xì)分):網(wǎng)站(只有網(wǎng)站頁(yè)面資源等內(nèi)容)、接口(包括網(wǎng)站的所有數(shù)據(jù)邏輯處理,頁(yè)面的數(shù)據(jù)請(qǐng)求交互都是直接同接口交互(js技術(shù))),只是網(wǎng)站項(xiàng)目按照上一篇博文方式設(shè)置自定義錯(cuò)誤頁(yè)面方式,這樣是能夠解決問題,項(xiàng)目也會(huì)更加的清晰,也有很多公司的項(xiàng)目就是按照這種方式(尤其是webApp),但是在實(shí)際項(xiàng)目中,很多項(xiàng)目是沒有達(dá)到這種嚴(yán)格區(qū)分的,所以下面的解決方案二,將介紹一個(gè)更通用的方式

解決方法二:

解決思路是:將上一篇博文.net自定義錯(cuò)誤頁(yè)面實(shí)現(xiàn) 與 上上一篇博文 .net捕捉全局未處理異常的3種方式 結(jié)合使用,并在實(shí)際開發(fā)中嚴(yán)格約定(出了url地址請(qǐng)求以外的其他請(qǐng)求都通過post請(qǐng)求實(shí)現(xiàn)交互),在撲捉到異常時(shí),如果是post請(qǐng)求,處理異常,并清除異常。具體以步驟如下:

第一步:定義一個(gè)請(qǐng)求處理結(jié)果數(shù)據(jù)MODEL,代碼如下:

/// <summary>
 /// 請(qǐng)求結(jié)果MRequestResult
 /// </summary>
 public class MRequestResult
 {
 /// <summary>
 /// 請(qǐng)求結(jié)果編碼(是一個(gè)枚舉值)
 /// </summary>
 private RequestResultCodeEnum requestResultCode;

 /// <summary>
 /// 處理結(jié)果具體的返回值
 /// </summary>
 private object resultValue;

 /// <summary>
 /// 請(qǐng)求結(jié)果編碼(是一個(gè)枚舉值)
 /// </summary>
 public RequestResultCodeEnum RequestResultCode
 {
  get
  {
  return this.requestResultCode;
  }

  set
  {
  this.requestResultCode = value;
  }
 }

 /// <summary>
 /// 處理結(jié)果具體的返回值
 /// </summary>
 public object ResultValue
 {
  get
  {
  return this.resultValue;
  }

  set
  {
  this.resultValue = value;
  }
 }
 }


 /// <summary>
 /// 請(qǐng)求結(jié)果編碼枚舉值()
 /// </summary>
 public enum RequestResultCodeEnum
 {
 /// <summary>
 /// 請(qǐng)求成功
 /// </summary>
 Success = 1,

 /// <summary>
 /// 請(qǐng)求失敗
 /// </summary>
 Fail = -1,
 }

第二步:按照 上一篇博文: .net自定義錯(cuò)誤頁(yè)面實(shí)現(xiàn)的步驟,配置好自定義錯(cuò)誤頁(yè)面相關(guān)配置操作

第三步:按照 上上一篇博文:.net捕捉全局未處理異常的3種方式 的步驟實(shí)現(xiàn)全局異常為處理相關(guān)操作設(shè)置

第四步:在撲捉全局未處理的異常中,添加上針對(duì)post請(qǐng)求的異常處理過濾(直接輸入封裝后的),具體代碼如下:

/// <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異常,這個(gè)異常包含一個(gè)實(shí)際出現(xiàn)的異常
  Exception ex = ctx.Server.GetLastError();
  //實(shí)際發(fā)生的異常
  Exception iex = ex.InnerException;

  //// 異常日志落地
  //// 異常日志落地包括:記錄異常文本文件日志、或者記錄異常日志數(shù)據(jù)庫(kù)等等(根據(jù)實(shí)際項(xiàng)目需要做記錄)

  //// 獲取請(qǐng)求方法
  string httpMethod = request.HttpMethod;
  //// 如果是POST請(qǐng)求,那么是以下請(qǐng)求之一
  //// ajax接口請(qǐng)求
  //// form表單提交
  //// 這種情況的異常,不用跳轉(zhuǎn)至自已的異常錯(cuò)誤頁(yè)面,直接返回對(duì)應(yīng)系統(tǒng)異常
  if (httpMethod.ToUpper() == "POST")
  {
  //// 構(gòu)建返回對(duì)象值
  MRequestResult requestResultM = new MRequestResult();
  requestResultM.RequestResultCode = RequestResultCodeEnum.Fail;
  requestResultM.ResultValue = "系統(tǒng)異常,請(qǐng)聯(lián)系管理員!";

  response.Write(JsonConvert.SerializeObject(requestResultM, Formatting.Indented));
  ctx.Server.ClearError();//處理完及時(shí)清理異常
  }
 }

代碼實(shí)例:

ajax請(qǐng)求方法及其邏輯處理實(shí)例代碼:

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

  if (resultValue) {
   //// 解析處理結(jié)果
   var resultObj = $.parseJSON(resultValue);

   //// 當(dāng)RequestResultCode==1 說明該請(qǐng)求成功
   ////(備注:并不代表處理成功,具體是否處理成功需要通過ResultValue的值根據(jù)接口約定解析做相應(yīng)的邏輯處理)
   if (resultObj["RequestResultCode"] == 1) {
   //// 自定義請(qǐng)求成功邏輯處理
   //// 通過解析具體的ResultValue的值做相應(yīng)的邏輯處理.....
   if (resultObj["ResultValue"]) {
    var doResult = resultObj["ResultValue"].split('^');
    if (doResult && doResult.length > 1) {
    if (doResult[0] == 1) {
     //// 說明處理成功,做相應(yīng)的邏輯處理
     alert("處理成功!");
    } else {
     //// 處理失敗
     alert(doResult[1]);
    }

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

   } else {
    alert("未知結(jié)果");
   }

   } else {
   //// 說明請(qǐng)求異常
   //// 自定義邏輯處理
   alert(resultObj["ResultValue"]);
   }
  } else {
   //// 自定義邏輯處理
   alert("操作失??!");
  }

  console.log(resultValue);
  },
  error: function (data) {
  //// 自定義邏輯處理
  alert("系統(tǒng)異常,請(qǐng)聯(lián)系管理員。電話:8888888");
  console.log(data);
  }
 });
 });

ajax對(duì)應(yīng)的后臺(tái)請(qǐng)求接受實(shí)例代碼:

/// <summary>
 /// 測(cè)試
 /// </summary>
 /// <returns></returns>
 public ContentResult ContentResultTest(string name)
 {
  //// 構(gòu)建請(qǐng)求處理結(jié)果Model
  MRequestResult requestResultM = new MRequestResult() { RequestResultCode = RequestResultCodeEnum.Success };

  //// 業(yè)務(wù)處理結(jié)果
  string doResult = string.Empty;

  //// 本次自作簡(jiǎn)單的參數(shù)非空判斷,只一個(gè)示例
  //// 處理結(jié)果本例中也只是通過^鏈接表示,在實(shí)際處理過程中,可以將結(jié)果通過一個(gè)Json字符串
  if (string.IsNullOrEmpty(name))
  {
  doResult = "-1^操作失?。好Q不能為空!";
  }
  else
  {
  ///// 其他自定義業(yè)務(wù)邏輯處理,此處省略.....
  doResult = "1^操作成功";
  }

  requestResultM.ResultValue = doResult;
  //// 返回結(jié)果
  return Content(JsonConvert.SerializeObject(requestResultM, Formatting.Indented));
 }

是不是覺得說的有點(diǎn)繞,本人表述能力有限,不懂的評(píng)論交流。
最后:個(gè)人能力有限也許該解決方式并不友好,有更好的解決方法,也歡迎留言交流,多多指點(diǎn),多多指教

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

桂东县| 蒲城县| 新源县| 金坛市| 长宁县| 廊坊市| 阿城市| 启东市| 健康| 平阴县| 射洪县| 丰都县| 九江县| 望谟县| 柘城县| 高碑店市| 原阳县| 滕州市| 房产| 正安县| 邳州市| 荣昌县| 任丘市| 九江县| 扎赉特旗| 达州市| 田阳县| 泰和县| 枣阳市| 福海县| 龙川县| 工布江达县| 波密县| 江城| 新密市| 江孜县| 深州市| 巴楚县| 巴南区| 高安市| 大丰市|