前端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();
});