J'ai un code d'essai:
try
{
...
}
catch(Exception ex)
{
ModelState.AddModelError(
"duplicateInvoiceNumberOrganisation", "The combination of organisation and invoice number must be unique");
}
Pour ce morceau de code, j'essaie d'insérer un enregistrement dans une base de données: le dba l'a configuré pour que la base de données vérifie les doublons et renvoie une erreur s'il y en a. Actuellement, comme vous pouvez le constater, j'ajoute la même erreur au modèle, peu importe l'erreur survenue. Je veux que cela change afin que cette erreur ne soit ajoutée au modèle que si elle a été causée par l'erreur de duplication configurée par le dba.
Ci-dessous est l'erreur que je veux attraper. Notez que c'est dans l'exception interne. Quelqu'un peut-il me dire comment attraper spécifiquement celui-ci?
avant votre prise actuelle ajoute ce qui suit:
catch(DbUpdateException ex)
{
if(ex.InnerException is UpdateException)
{
// do what you want with ex.InnerException...
}
}
A partir de C # 6, vous pouvez effectuer les opérations suivantes:
catch(DbUpdateException ex) when (ex.InnerException is UpdateException)
{
// do what you want with ex.InnerException...
}
Remplacez System.Threading.ThreadAbortException
par votre exception.
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
}
}
Pour obtenir le nom de l'exception, vous pouvez utiliser
catch (Exception exc){
if (exc.GetType().FullName == "Your_Exception")
{
// The same can be user for InnerExceptions
// exc.InnerException.GetType().FullName
}
}
Pas assez de rep pour commenter. En réponse à la question @conterio (dans la réponse @Davide Piras):
y a-t-il une capture "quand ça ne l'est pas" syntaxe?
Il y a.
catch (Exception e) when (!(e is ArgumentException)) { }
tu veux dire
catch (Exception e){
if ( e.GetType() == XyzException)
//if (e.GetType().ToString() == "XyzException")
//if (e.GetType().Name == .....)
}