如何接受查询和 return 异步任务?
How to accept a query and return an async task?
我遇到以下异常:
Cannot create an EDM model as the action 'Get' on controller 'Accounts' has a return type 'System.Web.Http.IHttpActionResult' that does not implement IEnumerable<T>.
尝试查询我的端点时:
http://localhost:8267/api/accounts
正在执行工作的 AccountsController:
public async Task<IHttpActionResult> Get(ODataQueryOptions options)
{
var query = options.Request.RequestUri.PathAndQuery;
var client = new HttpClient();
var crmEndPoint = @"HTTPS://MYCRMORG.COM/API/DATA/V8.1/";
HttpResponseMessage response = await client.GetAsync(crmEndPoint+query);
object result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<object>();
return Ok(result);
}
return NotFound();
}
我做错了什么?我如何简单地将 PathAndQuery 添加到我的 crmEndPoint 和 return 结果?
OData 框架在纯 Web API 之上提供额外的响应 formatting/querying 规则。
使用 ODataQueryOptions
参数 要求 操作方法 returns IQueryable<T>
或 IEnumerable<T>
。
ODataQueryOptions
只是帮助解析传入的 OData 请求 url,使 $filter
和 $sort
等参数可通过属性访问。
您的代码不需要此服务,因为它所做的只是将请求重定向到 crmEndPoint
。因此,您可以通过控制器的 Request
属性 访问请求对象,而不是使用 options.Request
并完全删除参数。
代码如下:
public async Task<IHttpActionResult> Get()
{
var query = Request.RequestUri.PathAndQuery;
var client = new HttpClient();
var crmEndPoint = @"HTTPS://MYCRMORG.COM/API/DATA/V8.1/";
HttpResponseMessage response = await client.GetAsync(crmEndPoint + query);
object result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<object>();
return Ok(result);
}
return NotFound();
}
我遇到以下异常:
Cannot create an EDM model as the action 'Get' on controller 'Accounts' has a return type 'System.Web.Http.IHttpActionResult' that does not implement IEnumerable<T>.
尝试查询我的端点时:
http://localhost:8267/api/accounts
正在执行工作的 AccountsController:
public async Task<IHttpActionResult> Get(ODataQueryOptions options)
{
var query = options.Request.RequestUri.PathAndQuery;
var client = new HttpClient();
var crmEndPoint = @"HTTPS://MYCRMORG.COM/API/DATA/V8.1/";
HttpResponseMessage response = await client.GetAsync(crmEndPoint+query);
object result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<object>();
return Ok(result);
}
return NotFound();
}
我做错了什么?我如何简单地将 PathAndQuery 添加到我的 crmEndPoint 和 return 结果?
OData 框架在纯 Web API 之上提供额外的响应 formatting/querying 规则。
使用 ODataQueryOptions
参数 要求 操作方法 returns IQueryable<T>
或 IEnumerable<T>
。
ODataQueryOptions
只是帮助解析传入的 OData 请求 url,使 $filter
和 $sort
等参数可通过属性访问。
您的代码不需要此服务,因为它所做的只是将请求重定向到 crmEndPoint
。因此,您可以通过控制器的 Request
属性 访问请求对象,而不是使用 options.Request
并完全删除参数。
代码如下:
public async Task<IHttpActionResult> Get()
{
var query = Request.RequestUri.PathAndQuery;
var client = new HttpClient();
var crmEndPoint = @"HTTPS://MYCRMORG.COM/API/DATA/V8.1/";
HttpResponseMessage response = await client.GetAsync(crmEndPoint + query);
object result;
if (response.IsSuccessStatusCode)
{
result = await response.Content.ReadAsAsync<object>();
return Ok(result);
}
return NotFound();
}