ajaxベースのコンポーネント(KendoUI)を使用して、WCFDataServicesによって実装されたODataエンドポイント上のエンティティを読み取り/変更したいと思います。
そもそも、サービスの実装はかなり簡単でした。
public class MyFooService : DataService<FooContext>
{
public static void SetEntitySetAccessRules(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite);
}
}
今、私はPUTを使用してエンティティを変更できることを期待していました。KendoUIは、素晴らしく簡単な構成インターフェースを提供し、PUT要求の生成に優れています。
クロスドメインリクエストを作成し、CORSを使用しています。そのため、たとえばFirefoxは、PUTを送信する前にプリフライトOPTIONSリクエストをODataサービスに送信します。
残念ながら、サービスエンドポイントは、すぐに使用できるOPTIONSをサポートしていないようです。OPTIONSリクエストへの応答は、空のコンテンツで「501NotImplemented」です。少なくとも、応答には次のように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>
「オプション」は非常に人気のある用語であるため、これをグーグルで検索するのは少し難しいことがわかりました...
この記事を見つけましたが、非常に複雑なようです。つまり、ODataはすべてRESTに関するものですが、WCFDataServicesがプリフライトリクエストを許可する簡単な方法を提供していないとは想像できません。