【发布时间】:2018-12-05 00:26:37
【问题描述】:
我正在尝试使用 C#(VS 2017,.Net 4.6.1)构建 OData 服务,但无法使 OData 查询字符串选项正常工作。返回组或单个 MusicItem 的调用有效,但是当我添加 $top=2 时,我收到 HTTP 404 响应。我已经在网上研究了两天,但找不到答案。
想法?
WebApiConfig如下:
using md.music.services.Models;
using Microsoft.AspNet.OData.Builder;
using Microsoft.AspNet.OData.Extensions;
using Microsoft.OData.Edm;
using System.Web.Http;
namespace md.music.services
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.MapHttpAttributeRoutes();
config.MapODataServiceRoute("ODataRoute", "odata", GetImplicitEDM());
}
public static IEdmModel GetImplicitEDM()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MusicItem>("MusicItems");
return builder.GetEdmModel();
}
}
}
MusicItemsController 如下:
using md.music.services.Models;
using Microsoft.AspNet.OData;
using Microsoft.AspNet.OData.Query;
using System.Linq;
using System.Web.Http;
namespace md.music.services.Controllers
{
public class MusicItemsController : ODataController
{
WA0002Entities entities = new WA0002Entities();
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<MusicItem> Get(ODataQueryOptions opts)
{
return entities.MusicItems.AsQueryable<);
}
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public MusicItem Get([FromODataUri] int key)
{
MusicItem thisObject = entities.MusicItems.FirstOrDefault(c => c.RowID == key);
if (thisObject == null)
{
throw new HttpResponseException(System.Net.HttpStatusCode.NotFound);
}
return thisObject;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
entities.Dispose();
}
}
}
【问题讨论】: