如果服务层未找到请求的资源,则返回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);
- }
- }