c# - 没有注册非 OData HTTP 路由

标签 c# asp.net-web-api odata

我关注了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/

相关文章:

http - 根据我们域中定义的规则,Http 状态代码 412 是否适合错误

c# - 为什么这个文件默认保存在IIS Express文件夹中?

javascript - 在没有 UIWebView 的情况下从 Xcode 执行 JS 文件

c# - 使用 WebApi 和映射模型实现 OData

c# - 如何在 Web API 和 OData 中进行 PATCH

c# - 如何用自定义应用程序替换 Windows 10 上的登录应用程序

c# - 无法掌握 Freeze/Inject/Register 之间的区别

c# - Rx - 暂停 Observable.Interval

c# - 如何修复文件格式和扩展名不匹配?

.net - 我应该使用 Web API 还是 Web 方法?