chi*_*oro 6 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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我希望能够使用PUT修改实体.KendoUI提供了一个简单易用的配置界面,在生成PUT请求方面做得很好.
我们正在制作跨域请求并使用CORS.因此,Firefox会在发送PUT之前向OData服务发送预检OPTIONS请求.
不幸的是,服务端点似乎不支持OPTIONS开箱即用:对OPTIONS请求的响应是"501 Not Implemented",内容为空.至少我们管理过响应的CORS头如下:
<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>
Run Code Online (Sandbox Code Playgroud)
谷歌搜索已经变得有点挑战,因为"选项"是一个非常受欢迎的术语......
我发现这篇文章但看起来非常非常复杂.我的意思是,OData是关于REST的,我无法想象WCF数据服务不提供允许预检请求的简单方法,或者?
目前,WCF DataServices 不支持 CORS,我见过的每个解决方案都是黑客行为,并且工作充其量也很不稳定。
我遇到了同样的问题,我只是将代码从 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-阳极数据端点
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |