错误500“查询无法应用于'System.Net.Http.ByteArrayContent'类型的响应内容

时间:2016-12-22 08:03:45

标签: c# asp.net-web-api odata response httpresponse

我正在尝试在我的Webapi中输出缓存。我按照以下文章https://github.com/filipw/Strathweb.CacheOutput中的讨论安装了Nuget软件包“Strathweb.CacheOutput.WebApi2”。安装完毕后我使用了:

[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 100, AnonymousOnly = true)]
    public HttpResponseMessage Get()
    {
        var list = context.Colors.ToList();
        return Request.CreateResponse(HttpStatusCode.OK,list.AsQueryable<Color>() );
    }

它返回此错误:

  

{“Message”:“发生了错误。”,“ExceptionMessage”:“查询无法应用于'System.Net.Http.ByteArrayContent'类型的响应内容。响应内容必须是ObjectContent。 \ r \ nParameter name:actionExecutedContext“,”ExceptionType“:”System.ArgumentException“,”StackTrace“:”在System.Web.Http上的System.Web.Http.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\ r \ n .Filters.ActionFilterAttribute.OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext,CancellationToken cancellationToken)\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ r \ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务)任务)\ r \ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n在System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\ r \ n ---堆栈结束从抛出异常的先前位置追踪--- \ r \ n在System.Ru处System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n的ntime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter上的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n中的\ r \ n System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\ r \ n中的.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ r \ n System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n在System.Web.Http.Controllers.AuthenticationFilterResult.d__0的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n中。 MoveNext()\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ r \ n在Sys tem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n中)“}

我该怎么做才能解决此问题。我是Web Api的新手。感谢

1 个答案:

答案 0 :(得分:3)

由于Web Api是服务器端链中的最后一步,因此需要在使用响应发送IQueryable之前执行/评估它。所以简单的解决方案就是按原样发送列表

public HttpResponseMessage Get()
{
    var list = context.Colors.ToList();
    return Request.CreateResponse(HttpStatusCode.OK,list);
}