2017-02-28 55 views
9

我跟着this教程来创建WebAPI REST服务。没有注册非OData HTTP路由

之后,我可以通过指向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()); 

而且还增加了[EnableQuery]参数上Contact.GetContacts()方法。这样,我可以查询这样的特定联系人:

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) 
... 

我应该怎么做才能解决这个问题?

+0

对此有任何答案?我遇到了同样的问题。 –

+0

@MichaelBowman不幸的是没有 – Teejay

回答

10

我遇到了这个问题,因为我有依赖注射工作,我设法通过增加GlobalConfiguration.Configuration.EnableDependencyInjection()startup.cs

前解决这个问题。

using System.Web.OData.Extensions; 
public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     GlobalConfiguration.Configuration.EnableDependencyInjection(); 
    } 
} 
+0

如果不使用GlobalConfiguration,修改上面的等: 'VAR httpConfiguration =新HttpConfiguration();'' httpConfiguration.EnableDependencyInjection();'' 变种请求=新HttpRequestMessage(HttpMethod.Get ,(Uri)Request.Url);' 'request.SetConfiguration(httpConfiguration);' –

0

在我的情况,我得到了上面的错误,即使我有一个单独的项目,它没有OData的代码在所有。所以这是一个非常奇怪的消息。

我的解决方法是从删除packages文件夹中的所有包。之后,它再次运作。一些Odata软件包仍然在这个文件夹中。