【问题标题】:Web Api Odata not workingWeb Api Odata 不工作
【发布时间】:2013-03-01 19:47:39
【问题描述】:

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

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

然后总是出错:

找不到资源。

【问题讨论】:

  • 我查看了您的代码,对我来说它看起来非常好。 “找不到资源”看起来不像是 Web API 抛出的错误,所以请求根本不能发送到 Web API。可能是 IIS 不适合您。该文件夹是否属于 IIS 应用程序?
  • 我没有部署在IIS上,我用的是vs iis express。最有趣的是,首先我添加了 Odata 控制器,它工作正常。之后安装热毛巾单页应用程序然后它不工作。它尝试了很多选项,但没有奏效。如果您有任何其他线索,请建议我。
  • 我也有同样的问题 - 你能解决这个问题吗?
  • @t316 问题与其他控制器配置有关。所以它被路由到其他控制器而不是 Api 配置。

标签: asp.net-web-api odata


【解决方案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());
}

【讨论】:

    【解决方案2】:

    只需在 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" />
    

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

    【讨论】:

      猜你喜欢
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 2011-10-08
      相关资源
      最近更新 更多