我希望使用基于ajax的组件(KendoUI)来读取/修改WCF DataServices实现的OData端点上的实体。
服务实现本身非常简单:
现在我希望使用PUT方法修改实体。KendoUI提供了一个简单易用的配置界面,并且在生成PUT请求方面做得很好。
我们正在进行跨域请求并使用CORS。例如,Firefox在发送PUT请求之前向OData服务发送预检请求OPTIONS。
不幸的是,服务终点似乎不支持开箱即用的OPTIONS:对OPTIONS请求的响应是“501 Not Implemented”,而内容为空。至少我们成功地让响应具有以下CORS标头:
服务实现本身非常简单:
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 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>
由于“选项”是一个非常流行的术语,因此在Google上搜索这个词有点具有挑战性...
我找到了这篇文章,但它似乎非常,非常复杂。我的意思是,OData都是关于REST的,我无法想象WCF数据服务不提供一种简单的方法来允许预检请求,或者?