2013-03-13 86 views
0

我创建了一个Web Api OData控制器,并尝试直接查看它,但它不起作用。Web Api Odata不工作

WebApiConfig配置

public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapODataRoute("odata", "odata", GetEdmModel()); 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
    ); 
    } 

    public static IEdmModel GetEdmModel() 
    { 
     ODataModelBuilder builder = new ODataConventionModelBuilder(); 
     builder.EntitySet<Customer>("Customers"); 
     builder.Namespace = "PackageManager.Models"; 
     return builder.GetEdmModel(); 
    } 
在应用程序启动

调用登记:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

阿比控制器:

public class CustomersController : EntitySetController<Customer, string> 
    { 
    NorthwindDbContext _Context = new NorthwindDbContext(); 

    [Queryable] 
    public override IQueryable<Customer> Get() 
    { 
     return _Context.Customers; 
    } 

    protected override void Dispose(bool disposing) 
    { 
     base.Dispose(disposing); 
      _Context.Dispose(); 
    } 
    } 

尝试访问: 本地主机:2375 /的OData /客户

然后总是出错:

无法找到该资源。

+1

我看着你的代码,它看起来绝对很好。 “无法找到资源”看起来不像Web API抛出的错误,所以请求一定不会让它进入Web API。它可能是IIS不适合你。该文件夹是否被归为IIS应用程序? – 2013-03-13 18:50:03

+0

我没有在IIS上部署,我使用vs iis express。最有趣的事情,首先我添加Odata控制器它工作正常。之后安装HOt毛巾单页应用程序,然后它不起作用。它尝试了很多选择,但没有奏效。如果您有任何其他线索,请告诉我。 – Parwej 2013-03-14 16:51:10

+0

我有完全相同的问题 - 你能解决这个问题吗? – t316 2013-06-09 19:35:07

回答

-1

只需添加后续处理web.config上system.webServer \处理程序:

<add name="ApiURIs-ISAPI-Integrated-4.0" path="*" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

或更换

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

(不同 - 一个路径点 - 属性)

-1

@Parwej - 尝试在您的webapi.config中代替代码编写以下代码。此外,请确保您的网址遵循正确的大小写,因为Odata网址区分大小写。并且不要忘记在控制器中使用System.Web.Http.OData而不是System.Web.Odata。这应该工作。

public static void Register(HttpConfiguration config) 
{ 
    ODataModelBuilder builder = new ODataConventionModelBuilder(); 
    builder.EntitySet<Customer>("Customers"); 
    config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel()); 
}