.net mvc Angular2項目 ajax請求返回結果異常處理

前端ajax請求後,後臺出錯返回錯誤data的數據,展示返回錯誤的message。

跟劇請求頭,如果是ajax的請求,返回一個json的object的回去,屬性中會有isSuccess,與MessageInfo 等字段,根據是否是exception,會在controller實現重寫OnExcetion

方法,但是默認情況下IIS中 .net中會是error remote only.所以在本地server測試的時候,返回的json數據,請求頭都是200,但是在remote情況下,就是返回500錯誤的狀態碼,所以導出返回的json data 數據類型有些變化,這裏就導致了同一份代碼,在本地是working的但是部署到服務器裏 從外面訪問時候就到吃data轉化問題拿不到值得錯誤。

angular js代碼 設置請求頭參數

    options: RequestOptions;
    constructor(private http: Http) {
        let headers = new Headers();
        headers.append('X-Requested-With', 'XMLHttpRequest');
        this.options = new RequestOptions({ headers: headers });



c#代碼 如果直接在filtercontext.response.statusCode中直接把設置爲200也可以避免這個問題。

 protected override void OnException(ExceptionContext filterContext)
        {
            if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = 200;
                var ajaxResultModel = new AjaxResultModel();
                ajaxResultModel.Message = filterContext.Exception.Message;
                ExceptionInfo exceptionInfo = new ExceptionInfo(filterContext.Exception);
                Logger.WriteException(filterContext.Exception);
                //ajaxResultModel.ExceptionInfo = exceptionInfo;
                ajaxResultModel.Code = Accelerator.Common.Constants.AjaxStatusCode.Failed;
                ajaxResultModel.IsSuccess = false;
                ajaxResultModel.MessageInfo = filterContext.Exception.Message;
                filterContext.Result = Json(new { data = ajaxResultModel }, JsonRequestBehavior.AllowGet);//new JsonResult { Data = ajaxResultModel, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
            }
            else
            {
                if (filterContext.Exception is SessionException)
                {

如果錯誤的默認配置下,會返回有異常的json, 真正的數據是放在responseText裏面,正確的是直接在data裏面。


當然我們可以用下面的ajax代碼,無論是有異常還是正常的都可以拿到返回的data。 因爲數據類型裏會有文件類型,所以contentType屬性用false, 

multipart/form-data; boundary=----WebKitFormBoundaryFrcoSUcr7uLoU1SX從請求頭中可以看到生成的請求數據類型是這個。

$.ajax({
                    url: './LeaveInfo/SaveAbRequest',
                    data: formData,
                    type: 'POST',
                    contentType: false,
                    processData: false,
                    dataType: 'json',
                    async: false,
                    cache: false
                    //success: function (data: any, textStatus: any) {
                    //    if (data.data.IsSuccess) {
                    //        messageFlag = "success";
                    //    } else {
                    //        messageFlag = "failure";
                    //        errorMessage = data.data.MessageInfo;
                    //    }
                    //}
                    //error: function (err: any) {                   
                    //    messageFlag = "failure";
                    //}
                }).always(function (jqXHR: any, textStatus: any, errorThrown: any) {
                    var data = (jqXHR.responseJSON || jqXHR).data;
                    //alert(JSON.stringify(jqXHR));
                    if (data.IsSuccess) {
                        messageFlag = "success";
                    } else {
                        messageFlag = "failure";
                        errorMessage = data.MessageInfo;
                    }
                    //$("div[class='loading-mask']").hide();
                });

          

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章