Ano*_*use 72 c# asp.net-mvc exception-handling
我有一块try catch代码:
try
{
...
}
catch(Exception ex)
{
ModelState.AddModelError(
"duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique");
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码,我正在尝试将记录插入到数据库中:dba已将其设置为以便数据库检查重复项,如果存在重复项则返回错误.目前,正如您所看到的,无论发生什么错误,我都会向模型添加相同的错误.我希望它改变,所以如果这个错误是由dba设置的重复错误引起的,那么这个错误只会添加到模型中.
以下是我想要捕捉的错误.注意它在内部异常中.谁能告诉我如何专门捕捉这个?

Dav*_*ras 125
在当前捕获之前添加以下内容:
catch(DbUpdateException ex)
{
if(ex.InnerException is UpdateException)
{
// do what you want with ex.InnerException...
}
}
Run Code Online (Sandbox Code Playgroud)
从C#6开始,您可以执行以下操作:
catch(DbUpdateException ex) when (ex.InnerException is UpdateException)
{
// do what you want with ex.InnerException...
}
Run Code Online (Sandbox Code Playgroud)
Nis*_*tha 14
替换System.Threading.ThreadAbortException为您的例外.
try
{
//assume ThreadAbortException occurs here
}
catch (Exception ex)
{
if (ex.GetType().IsAssignableFrom(typeof(System.Threading.ThreadAbortException)))
{
//what you want to do when ThreadAbortException occurs
}
else
{
//do when other exceptions occur
}
}
Run Code Online (Sandbox Code Playgroud)
Jas*_*son 12
没有足够的代表发表评论。回应@conterio问题(在@Davide Piras回答中):
是否有一个“何时不”语法?
有。
catch (Exception e) when (!(e is ArgumentException)) { }
Run Code Online (Sandbox Code Playgroud)
小智 10
要获取异常的名称,您可以使用
catch (Exception exc){
if (exc.GetType().FullName == "Your_Exception")
{
// The same can be user for InnerExceptions
// exc.InnerException.GetType().FullName
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70338 次 |
| 最近记录: |