抛出异常的两种方法如何区分它们
Two Methods That Throws Exceptions How To Differentiate between them
我有一个 try catch 块,它包含两个可以抛出 ArgumentException 的方法。
我想区分异常,以便我可以 return 为用户提供更好的错误消息。
最好的方法是什么? (我想避免用两个单独的 try catch 块包围它)。
try
{
var store = storeFactory.Create(id); // Can Throw ArgumentException
var order = await store.GetOrderAsync(orderId); //Can Throw ArgumentException
return Ok(order);
}
catch (ArgumentException ex)
{
//TODO: How To Tell Which Methods Throw The Exception (Create Or GetOrderAsync)
return NotFound("Store Id Was Not Found");
return NotFound("Order Id Was Not Found");
}
您可以简单地将 try
块分成两个 try
块:
try
{
var store = storeFactory.Create(id); // Can Throw ArgumentException
try
{
var order = await store.GetOrderAsync(orderId); //Can Throw ArgumentException
return Ok(order);
}
catch ( ArgumentException ex )
{
return NotFound("Order Id Was Not Found");
}
}
catch (ArgumentException ex)
{
//TODO: How To Tell Which Methods Throw The Exception (Create Or GetOrderAsync)
return NotFound("Store Id Was Not Found");
}
然而,更好的解决方案是为这两种情况创建一种新的异常类型,例如:
public class OrderNotFoundException : Exception
和
public class StoreNotFoundException : Exception
然后修改您的方法以抛出这些描述性错误。
我有一个 try catch 块,它包含两个可以抛出 ArgumentException 的方法。
我想区分异常,以便我可以 return 为用户提供更好的错误消息。 最好的方法是什么? (我想避免用两个单独的 try catch 块包围它)。
try
{
var store = storeFactory.Create(id); // Can Throw ArgumentException
var order = await store.GetOrderAsync(orderId); //Can Throw ArgumentException
return Ok(order);
}
catch (ArgumentException ex)
{
//TODO: How To Tell Which Methods Throw The Exception (Create Or GetOrderAsync)
return NotFound("Store Id Was Not Found");
return NotFound("Order Id Was Not Found");
}
您可以简单地将 try
块分成两个 try
块:
try
{
var store = storeFactory.Create(id); // Can Throw ArgumentException
try
{
var order = await store.GetOrderAsync(orderId); //Can Throw ArgumentException
return Ok(order);
}
catch ( ArgumentException ex )
{
return NotFound("Order Id Was Not Found");
}
}
catch (ArgumentException ex)
{
//TODO: How To Tell Which Methods Throw The Exception (Create Or GetOrderAsync)
return NotFound("Store Id Was Not Found");
}
然而,更好的解决方案是为这两种情况创建一种新的异常类型,例如:
public class OrderNotFoundException : Exception
和
public class StoreNotFoundException : Exception
然后修改您的方法以抛出这些描述性错误。