C#以更好的方式使用db上下文和异常处理(DRY)

C#以更好的方式使用db上下文和异常处理(DRY),c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我在WEP API控制器的给定动作中编写这段代码,在我制作的web API控制器的所有动作方法中,这会导致大量代码冗余并重复我的自我(!DRY),因此我需要一种方法,可以使用更好的方法使用继承或iterface或使用任何其他面向对象的方法来完成 [Route("myApiGetRequest")] [HttpGet] public IHttpActionResult myApiGetRequest(long id) { try { DataTable transa

我在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 });
    }
}

异常处理可以通过实现自己的异常来完成。您可以使用此属性修饰所有需要异常处理的控制器


基本上,您可以覆盖
OnException
方法,并将不同的异常类型转换为状态代码和消息。

您可以利用
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
中发生的异常将由相应的异常过滤器处理,该方法将被修饰