处理未处理的异常MVC4 C#knockout和ajax
我正在使用knockout并使用下面给出的自定义函数对控制器进行ajax调用。如果发生任何未处理的异常,它将返回整个页面作为响应,这将导致响应显示页面的整个html。请建议正确的处理方法处理未处理的异常MVC4 C#knockout和ajax,c#,jquery,ajax,asp.net-mvc-4,knockout.js,C#,Jquery,Ajax,Asp.net Mvc 4,Knockout.js,我正在使用knockout并使用下面给出的自定义函数对控制器进行ajax调用。如果发生任何未处理的异常,它将返回整个页面作为响应,这将导致响应显示页面的整个html。请建议正确的处理方法 function asyncComputed(evaluator, owner) { var result = ko.observable(), currentDeferred; result.inProgress = ko.observable(false); // Track whether we're w
function asyncComputed(evaluator, owner) {
var result = ko.observable(), currentDeferred;
result.inProgress = ko.observable(false); // Track whether we're waiting for a result
ko.computed(function () {
// Abort any in-flight evaluation to ensure we only notify with the latest value
if (currentDeferred) { currentDeferred.reject(); }
var evaluatorResult = evaluator.call(owner);
// Cope with both asynchronous and synchronous values
if (evaluatorResult && (typeof evaluatorResult.done == "function")) { // Async
result.inProgress(true);
currentDeferred = $.Deferred().done(function (data) {
result.inProgress(false);
if (data.hasOwnProperty("HasFailed") == true && data.ErrorCode == 1)//For Session Time Out
{
$("#timeoutmessage")
.html('<div class="modal-backdrop">' +
'<div style="color:white;" class="middle">' +
'<div class="row-fluid"><div>Your session has timed out, please <a href="/">Login here </a>again.</div></div>' +
'</div>')
.show();
}
result(data);
});
evaluatorResult.done(currentDeferred.resolve);
} else // Sync
result(evaluatorResult);
});
return result;
}
我正在使用asycomputed函数进行ajax调用,如果任何ajax调用异常,所有ajax调用都会失败,并生成响应页面的html。
我可以在这里使用过滤器吗请建议您可以在服务器上编写一个自定义操作过滤器,用于捕获异常并将其更改为JSON响应
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
然后,您只需将自定义属性添加到控制器操作中。是否查看了HandleErrorAttribute?请参见Thank@elolos我已经这样做了,但我想在该特定区域显示错误消息我将如何做您需要检查result对象中的success属性(或使用HasFailed而不是success)。
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}