我正在尝试捕获异常消息并提醒用户 因此,当我使用异常时,它可以正常使用消息"有关详细信息,请参阅内部异常"我想要的是显示sql异常,例如我的方案中的重复键我想从触发器接收消息。
try {
if (ModelState.IsValid)
{
db.Entry(investor).State = EntityState.Modified;
db.SaveChanges();
if (amount != 0)
{
InvestorPeriod ip = new InvestorPeriod();
ip.InvestorID = investor.InvestorID;
ip.Amount = amount;
ip.RemainingAmount = amount;
ip.InvestorPeriodStatusID = 1;
db.InvestorPeriods.Add(ip);
db.SaveChanges();
}
}
}
catch (SqlException ex)
{
// I want to display the sqlexception instead of the "please see inner exception for details" and then display it a dialog
ViewBag.Error = ex.Message;
}
答案 0 :(得分:0)
以下是如何获取所有内部异常的示例代码
catch (SqlException ex)
{
// All message will be stored here.
var exceptionMessages = new List<string>();
exceptionMessages.Add(ex.Message);
while(ex.InnerException != null)
{
ex = ex.InnerException;
exceptionMessages.Add(ex.Message);
}
// Add messages to ViewBag
ViewBag.Error = string.Join(" ", exceptionMessages);
}
答案 1 :(得分:0)
.NET有一种自动检索内部异常的方法(这就是你被要求做的事情) - Exception.GetBaseException()
。因此,您只需将最后一行更改为:
ViewBag.Error = ex.GetBaseException().Message;
有时你确实希望获得所有异常消息,在这种情况下你必须循环遍历InnerExceptions(或者如果异常是AggregateException则展平它们)