如何将自定义错误信息从ASP.NETMVC3JsonResult
方法传递给的error
(success
或complete
,如果需要的话)函数jQuery.ajax()
?理想情况下,我希望能够:
这是我的代码的基本版本:
public JsonResult DoStuff(string argString)
{
string errorInfo = "";
try
{
DoOtherStuff(argString);
}
catch(Exception e)
{
errorInfo = "Failed to call DoOtherStuff()";
//Edit HTTP Response here to include 'errorInfo' ?
throw e;
}
return Json(true);
}
$.ajax({
type: "POST",
url: "../MyController/DoStuff",
data: {argString: "arg string"},
dataType: "json",
traditional: true,
success: function(data, statusCode, xhr){
if (data === true)
//Success handling
else
//Error handling here? But error still needs to be thrown on server...
},
error: function(xhr, errorType, exception) {
//Here 'exception' is 'Internal Server Error'
//Haven't had luck editing the Response on the server to pass something here
}
});
我尝试过的事情(没有解决):
catch
块 返回错误信息
catch
块中 编辑HTTP响应
xhr
在jQuery错误处理程序中检查xhr.getResponseHeader()
等包含默认的ASP.NET错误页面,但我没有任何信息您可以编写一个自定义错误过滤器:
public class JsonExceptionFilterAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new
{
// obviously here you could include whatever information you want about the exception
// for example if you have some custom exceptions you could test
// the type of the actual exception and extract additional data
// For the sake of simplicity let's suppose that we want to
// send only the exception message to the client
errorMessage = filterContext.Exception.Message
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
}
然后将其注册为全局过滤器,或者仅应用于您打算用AJAX调用的特定控制器/动作。
在客户端上:
$.ajax({
type: "POST",
url: "@Url.Action("DoStuff", "My")",
data: { argString: "arg string" },
dataType: "json",
traditional: true,
success: function(data) {
//Success handling
},
error: function(xhr) {
try {
// a try/catch is recommended as the error handler
// could occur in many events and there might not be
// a JSON response from the server
var json = $.parseJSON(xhr.responseText);
alert(json.errorMessage);
} catch(e) {
alert('something bad happened');
}
}
});
显然,您可能很快就无聊为每个AJAX请求编写重复的错误处理代码,因此最好为页面上的所有AJAX请求编写一次:
$(document).ajaxError(function (evt, xhr) {
try {
var json = $.parseJSON(xhr.responseText);
alert(json.errorMessage);
} catch (e) {
alert('something bad happened');
}
});
然后:
$.ajax({
type: "POST",
url: "@Url.Action("DoStuff", "My")",
data: { argString: "arg string" },
dataType: "json",
traditional: true,
success: function(data) {
//Success handling
}
});
另一种可能性是改编[我介绍的全局异常处理程序,以便在ErrorController内检查它是否是AJAX请求,并简单地将异常详细信息作为JSON返回。
本文向大家介绍ASP.NET中MVC使用AJAX调用JsonResult方法并返回自定义错误信息,包括了ASP.NET中MVC使用AJAX调用JsonResult方法并返回自定义错误信息的使用技巧和注意事项,需要的朋友参考一下 一、如何用AJAX调用JsonResult方法 比如FuckController中添加有个返回JsonResult类型的方法FuckJson(): 如果我们直接在浏览器里调
我有一个配置,我想从指定位置返回自定义错误。然而,我收到的却是标准的nginx错误页面。不过,我可以从未命名的位置获取自定义错误。 为了重现这个问题,我创建了这个简单的基于docker的设置: Dockerfile: 违约形态: 50x错误在这里并不有趣,我已经从nginx docker映像中调整了配置。 使用404以外的东西重定向到指定位置并没有什么区别。 404.html: 然后启动docke
我想拦截一个错误的JSON输入,并使用Dropwizard应用程序返回自定义错误消息。我遵循了这里提到的定义自定义异常映射器的方法:http://gary-rowe.com/agilestack/2012/10/23/how-to-implement-a-runtimeexceptionmapper-for-dropwizard/。但它不适合我。同样的问题也被问到这里https://groups.
故事是,我创建了一个自定义 API 路由 ,用于提取任何帖子类型的帖子。在本地,它可以完美地工作(MAMP),但在多个生产服务器(不同的环境)上,它会返回500错误。 适用于本地的API路由: http://wordpress.local/wp-json/wp-post-modal/v1/any-post-type?slug=modal-页 生产中的API路由示例(表明API路由确实存在): <
是否有一种方法可以将catch{}以序列化为JSON对象的方式从catch{}返回错误消息?我考虑向myObject添加一个List属性,并在其中存储错误。有没有更好的办法做到这一点?
当我用mockito模拟它并在以下情况下使用该方法时: 我得到了错误: 无法解析方法“then return(java.lang.String)” 但是上面返回的是可选的'<'object'>'和非可选的'<'string'>的实例。 为什么我不能直接返回一个可选的'<'string'>'实例呢?如果可以的话,我该怎么做呢?