0

我创建了一个 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();
    }

在 App 开始调用注册:

WebApiConfig.Register(GlobalConfiguration.Configuration);

API 控制器:

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();
    }
  }

尝试访问:localhost:2375/odata/Customers

然后总是出错:

无法找到该资源。

4

2 回答 2

-1

只需在 system.webServer\handler 上的 web.config 中添加以下内容:

<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" />

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

于 2014-05-04T10:52:16.803 回答
-1

@Parwej - 尝试在您的 webapi.config 而不是您的代码中编写以下代码。还要确保在您的 URL 中遵循正确的大小写,因为 Odata url 区分大小写。并且不要忘记在控制器中使用 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());
}
于 2015-06-11T07:36:30.503 回答