假设我有一个在向数据库列添加值时不受尊重的检查约束,或者假设我有一个使用 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);
}
});
}
此处错误不返回
"My Custom message .....(and some auto generated message)"....
它返回“内部服务器错误”..
知道我应该做什么吗?
最佳答案
那是因为您捕获了异常,并返回一个简单的字符串。理论上,您的 WebMethod 永远不会失败...(它会失败,但您指示 WebMethod 永远不会通知异常)。这就是为什么你的 ajax 调用永远不会到达错误函数。
通过捕获异常来封装和隐藏错误是一个坏主意。封装并抛出不同的异常,或者只是简单地删除try/catch block
关于javascript - 如何在AJAX错误方法中检索DbContext SqlException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257081/