我正在WEP API控制器的给定操作中编写这段代码,我正在制作Web API控制器中的所有操作方法,导致大量代码冗余并重复我的自我(!DRY)因此我需要一种方法这可以通过使用继承或iterface或使用任何其他面向对象的方法的更好方法来完成。
[Route("myApiGetRequest")]
[HttpGet]
public IHttpActionResult myApiGetRequest(long id)
{
try
{
DataTable transaction = new DataTable();
using (var context = new myDbContext())
{
//code for what I want to do
}
}
catch (Exception ex)
{
return Ok(new { success = false, message = ex.Message });
}
}
答案 0 :(得分:2)
ExceptionHandling可以通过实现自己的ExceptionFilterAttribute
来完成。您可以使用此属性来装饰需要异常处理的所有控制器。
基本上,您覆盖OnException
方法并将不同的异常类型转换为状态代码和消息。
答案 1 :(得分:2)
您可以利用WebApi
中提供的异常过滤器。然后,将异常处理代码移动到该过滤器。
例如:
public class MyExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is Exception)
{
context.Response = new HttpResponseMessage { Content = new StringContent("Exception occured", System.Text.Encoding.UTF8, "text/plain"), StatusCode = HttpStatusCode.InternalServerError};
}
}
}
然后在您的WebApi
控制器中,您可以执行以下操作:
[Route("myApiGetRequest")]
[HttpGet]
[MyExceptionFilter]
public IHttpActionResult myApiGetRequest(long id)
{
DataTable transaction = new DataTable();
using (var context = new myDbContext())
{
//code for what I want to do
}
}
您的myApiGetRequest
中出现的异常将由相应的异常过滤器处理,此过滤器将被装饰