wcf-data-services - WCF DataService 不支持预检选项请求?

标签 wcf-data-services odata cors preflight

我想使用基于 ajax 的组件 (KendoUI) 来读取/修改 WCF DataServices 实现的 OData 端点上的实体。

首先,服务实现相当简单:

public class MyFooService : DataService<FooContext>
{
    public static void SetEntitySetAccessRules(IDataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite);
    }
}

现在我希望能够使用 PUT 修改实体。 KendoUI 提供了一个漂亮且简单的配置界面,并且在生成 PUT 请求方面做得很好。

我们正在发出跨域请求并使用 CORS。因此,例如,Firefox 在发送 PUT 之前向 OData 服务发送预检 OPTIONS 请求。

不幸的是,服务端点似乎不支持开箱即用的 OPTIONS:对 OPTIONS 请求的响应是“501 未实现”,内容为空。至少我们设法使响应具有 CORS header ,如下所示:
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
  <!-- Enable cross-origin resource sharing -->
  <!-- http://enable-cors.org/#how-asp.net -->
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
      <add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With" />
      <add name="Access-Control-Allow-Credentials" value="true" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

谷歌搜索结果有点挑战性,因为“选项”是一个非常流行的术语......

我找到了 this article不过好像很,非常复杂的。我的意思是,OData 是关于 REST 的,我无法想象 WCF 数据服务不提供允许预检请求的简单方法,或者?

最佳答案

目前 WCF DataServices 不支持 CORS,我看到的每个解决方案都是一个 hack,并且充其量只是不稳定的。

我遇到了同样的问题,我只是将代码从 WCF 移植到 Web API 2 OData 解决方案。
Web API 2 支持 CORS,设置起来非常简单。

如果您熟悉 Web API,请查看此链接:
http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

这是有关如何使用 Web API 创建 OData 端点的教程:
http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/creating-an-odata-endpoint

关于wcf-data-services - WCF DataService 不支持预检选项请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13516617/

相关文章:

json - 获取所有应用程序扩展,以及仅从 MS Graph 获取对象的应用程序扩展

javascript - 避免 CORS 预检选项以获得更好的性能

c# - 在 WCF 数据服务中公开实体的其他属性

c# - WCF 数据服务 (CTP2) : There is a type mismatch between the client and the service

java - 使用 JAX-RS 和 OData 的 REST 服务?

javascript - 如何在 Javascript 中将 JSON (OData) 时间转换为 gg-mm-aaaa 之类的内容?

node.js - res.redirect() cors在MEAN应用程序中不起作用

node.js - Node js 客户端的响应为空

asp.net - 处理响应流时出错。 XML 元素包含混合内容

asp.net-mvc - 通过 OData 和 WebAPI 公开大数据模型