如果服务层未找到请求的资源,则返回null到Web API控制器;什么是将HttpStatusCode.NotFound响应抛回客户端而不在控制器中对其进行硬编码的最佳方法,并检查它是否为空?
解决方法
就个人而言,我只是根据Oppositional的评论对控制器进行检查,但你要求的是完全合理的.再次使用每个控制器附加的动作过滤器(或全局注册),你可以沿着这些方向做一些事情:
示例型号:
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); } }