如何在 AJAX 错误方法中检索 DbContext SqlException?
Posted
技术标签:
【中文标题】如何在 AJAX 错误方法中检索 DbContext SqlException?【英文标题】:How to retrieve DbContext SqlException in AJAX error method? 【发布时间】:2017-09-01 14:18:41 【问题描述】:假设我有一个在向数据库列添加值时不受尊重的检查约束,或者假设我有一个使用 RAISEERROR
和自定义消息的触发器。
在我的 WebMethod 中,我使用 SqlException
在更新数据库时捕获任何错误。因此,如果不遵守检查约束,我应该能够检索自动 SQL Server 错误消息,或者如果触发器引发错误消息正确,我应该能够检索我的自定义消息?
我该怎么做?
以下是我尝试过的:
[WebMethod]
public string AddData(entity e)
using(var context = new DB_ENTITY_DbContext())
try
context.entity.Add(e);
context.SaveChanges();
return "success";
catch(SqlException ex)
return "My custom message " + ex.Message;
javascript 代码
function AddData()
$.ajax(
// Some other settings
error: function (xhr, status, error)
alert(JSON.parse(xhr.responseText).Message);
alert(error);
);
这里错误不返回
“我的自定义消息.....(以及一些自动生成的消息)”....
它返回“内部服务器错误”..
知道我应该怎么做吗?
【问题讨论】:
你调试控制器中的 ex.Message 了吗?那边的异常信息是什么? 使用IHttpActionResult @snorlax 在下面试试我的答案。谢谢 【参考方案1】:那是因为你捕捉到了异常,并返回了一个简单的字符串。从理论上讲,您的 WebMethod 永远不会失败......(它会失败,但您指示 WebMethod 永远不会通知异常)。这就是为什么您的 ajax 调用永远不会到达错误函数的原因。
通过捕获异常来封装和隐藏错误是一个坏主意。封装并抛出不同的异常,或者只是简单地删除 try/catch 块
【讨论】:
【参考方案2】:控制器:
public class ClientErrorHandler : FilterAttribute, IExceptionFilter
public void OnException(ExceptionContext filterContext)
var response = filterContext.RequestContext.HttpContext.Response;
response.Write(filterContext.Exception.Message);
response.ContentType = MediaTypeNames.Text.Plain;
filterContext.ExceptionHandled = true;
[ClientErrorHandler]
public class SomeController : Controller
[HttpPost]
public ActionResult SomeAction()
throw new Exception("Error message");
查看脚本:
$.ajax(
type: "post", url: "/SomeController/SomeAction",
success: function (data, text)
//...
,
error: function (request, status, error)
alert(request.responseText);
);
【讨论】:
抱歉,我对这项技术有点陌生...我将在我的网络表单的代码后面添加所有这些。 ;ClientErrorHandler
将是 webform 后面代码中的一个类; SomeController
实际上是我的 webform 的部分类,SomeAction
是我的 WebMethod(我会重载 [WebMethod] 和 [HttpPost])对吗?
'SomeController' 表示您的控制器名称。
我不这么认为...我到处都失败了...它说我必须声明类...我正在尝试将 ti 保存到 jsFiddle 以向您展示
让我们continue this discussion in chat。以上是关于如何在 AJAX 错误方法中检索 DbContext SqlException?的主要内容,如果未能解决你的问题,请参考以下文章