javascript - 如何在AJAX错误方法中检索DbContext SqlException?

原文 标签 javascript c# ajax entity-framework

可以说我有一个向数据库列添加值时不遵守的检查约束,或者说我有一个将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);
        }    
    });
}


错误不在这里返回


  “我的自定义消息...(以及一些自动生成的消息)” ....


它返回“内部服务器错误” ..

对我应该做什么有任何想法吗?

最佳答案

那是因为您正在捕获异常,并返回一个简单的字符串。从理论上讲,您的WebMethod永远不会失败...(它会失败,但是您指示WebMethod永远不要告知异常)。这就是为什么您的Ajax调用永远不会到达错误函数的原因。

通过捕获异常来封装和隐藏错误是一个坏主意。封装并抛出其他异常,或者仅删除try / catch块

关于javascript - 如何在AJAX错误方法中检索DbContext SqlException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257081/

相关文章:

java - Cometd 允许你通过 JavaScript 发布数组吗?

javascript - 为什么 "_=1389258551926"在 ajax 请求中作为查询字符串参数发送?

c# - 如何删除Outlook加载项

c# - 有没有像 c# 的 python 装饰器之类的东西?

c# - 有没有办法在 Selenium 的 C# 端口中为 WebDriverWait 使用 FindsBy 注释?

javascript - jquery 数据表 : load real time progress bar

javascript - DataTables ajax.reload 保持分页时它跳转到页面底部

javascript - async await 与 axios 不返回错误

ajax - QTP Web 可扩展性工具包和 ajax

javascript - 脊椎、node.js (express) 和 Access-Control-Allow-Origin