我关注了this创建 WebAPI REST 服务的教程。
之后,我可以通过指向 http://baseaddress/api/Contacts
来加载所有联系人的列表。
然后我在 WebApiConfig.cs 的 Register
方法中添加了以下代码以启用 OData 端点:
config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Contact>("Contacts");
config.MapODataServiceRoute(
routeName: "OData",
routePrefix: "odata",
model: builder.GetEdmModel());
并且还在 Contact.GetContacts()
方法上添加了 [EnableQuery]
参数。这样,我就可以像这样查询特定的联系人:
http://baseaddress/odata/Contacts?$filter=startswith(Name,'A')
它就像魅力一样。
不幸的是,当我输入 [EnableQuery]
时,WebAPI 端点停止工作,而是显示以下错误:
No non-OData HTTP route registered.
in System.Web.OData.Extensions.HttpConfigurationExtensions.GetNonODataRootContainer(HttpConfiguration configuration)
in System.Web.OData.Extensions.HttpRequestMessageExtensions.GetRootContainer(HttpRequestMessage request, String routeName)
in System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateRequestScope(HttpRequestMessage request, String routeName)
in System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateRequestContainer(HttpRequestMessage request, String routeName)
...
我应该怎么做才能解决这个问题?
最佳答案
我遇到了这个问题,因为我正在使用依赖注入(inject),所以我设法通过将 GlobalConfiguration.Configuration.EnableDependencyInjection()
添加到我的 startup.cs
来解决这个问题
例如
using System.Web.OData.Extensions;
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration.EnableDependencyInjection();
}
}
关于c# - 没有注册非 OData HTTP 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519749/