我想使用基於ajax的組件(KendoUI)來讀取/修改由WCF DataServices實現的OData端點上的實體。WCF DataService不支持預檢OPTIONS請求?
服務實現是相當容易在首位:
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標題如下:
<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 Data Services不提供簡單的方法來允許預檢請求,或者?
我認爲WCF的OData服務在WCF上工作,並通過相同的WCF管道。如果是這樣,請查看此鏈接[answer。](http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-allowed-by-access-control-allow-origin/11606701#11606701 )。恕我直言,它是在WCF中實現CORS的最簡單方法。 – Obaid
我知道這不是你想要的,但我認爲使用跨域請求的最簡單方法就是使用IIS的反向代理。通過這種方式,您只能對自己的域進行操作,而IIS則將您的請求發送到其他域。然後,你的代碼不需要知道其他域的任何信息。 – lontivero
隨機偶然發現這一點;只是想我會鏈接到[this](https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors)和[that](https://data.uservoice.com/forums/ 72027-wcf-data-services-feature-suggestions/suggestions/4450449-cors-support)以獲取更多討論。 – tne