Asp.net-Mvc-4

空響應的 ASP.NET Web API 和狀態程式碼

  • November 16, 2016

如果服務層未找到請求的資源,則向 Web API 控制器返回 null;HttpStatusCode.NotFound將響應返回給客戶端而不在控制器中硬編碼並檢查它是否為空的最佳方法是什麼?

就我個人而言,我會根據反對派的評論對控制器進行檢查,但你所要求的完全合理。再次使用每個控制器附加的動作過濾器(或全域註冊),您可以按照以下方式執行操作:

範例模型:

public class Foo
{
   public string Bar { get; set; }
}

範例控制器:

public class FoosController : ApiController
{
   [NullObjectActionFilter]
   public Foo Get(string id)
   {
       // - Returns model and 200
       //return new Foo() { Bar = "TEST" };

       // - Returns 404
       //return null;
   }
}

過濾器:

public class NullObjectActionFilter : ActionFilterAttribute
{
   public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
   {
       object outValue = null;
       actionExecutedContext.Response.TryGetContentValue<object>(out outValue);
       if (outValue == null)
       {
           throw new HttpResponseException(HttpStatusCode.NotFound);
       }

       base.OnActionExecuted(actionExecutedContext);

   }
}

引用自:https://stackoverflow.com/questions/12592456