2012-11-22 92 views
5

我想使用基於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不提供簡單的方法來允許預檢請求,或者?

+1

我認爲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

+0

我知道這不是你想要的,但我認爲使用跨域請求的最簡單方法就是使用IIS的反向代理。通過這種方式,您只能對自己的域進行操作,而IIS則將您的請求發送到其他域。然後,你的代碼不需要知道其他域的任何信息。 – lontivero

+0

隨機偶然發現這一點;只是想我會鏈接到[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

回答

1

目前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-an-odata-endpoint

+0

謝謝。雖然答案很晚(我通過切換到WebAPI解決了這個問題:-)) - 對於任何未來的讀者來說,就我所知,這將是一個有用的答案。 – chiccodoro

相關問題