这个问题是这样的:不知道从哪个版本开始,在api返回结果时,如果我返回类型是IEnumberable<T>
,如果没有查询到相关结果,那么返回值就是null
,并且响应的是204 NoContent
,这样的话,前端就要求我必须返回[]
,我能怎么办呢?人肉手动判断一下…
是的,我在上个项目中就是这么做的…
如果不人肉的话,应该怎么做呢?那就用过滤器吧。
先上代码:
public class EmptyListActionFilter: ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
if (!(context.Result is ObjectResult)) return;
var objectResult = context.Result as ObjectResult;
if (objectResult.Value == null)
{
context.Result = new OkObjectResult(Enumerable.Empty<string>());
}
}
}
至于为什么要是Enumerable.Empty<string>()
的string
类型呢,没关系,我是随便设的,就想返回一个empty的数组就行了,然后把此过滤器放在调用的控制器函数上就可以啦