Silverlightから内部REST APIにアクセスしたかったのですが、リクエストのHTTPメソッドとしてPOSTまたはDELETEを使用できないことが判明しました。Silverlight:RestSharpを使用したHTTPの削除とPUTメソッド
こうすると、常にSecurityException
が返されます。
SilverlightでREST APIを使用するための推奨される方法は何ですか?
Silverlightから内部REST APIにアクセスしたかったのですが、リクエストのHTTPメソッドとしてPOSTまたはDELETEを使用できないことが判明しました。Silverlight:RestSharpを使用したHTTPの削除とPUTメソッド
こうすると、常にSecurityException
が返されます。
SilverlightでREST APIを使用するための推奨される方法は何ですか?
SecurityExceptionはおそらく、APIに適切なclientaccesspolicy.xmlファイルがないことを意味します。 非常にのすべてのHTTPメソッドとヘッダーを許可する寛大な例です。私たちはAPI(これは人気がありますが、私がSilverlightからどのくらいのトラフィックを得ているかはわかりません)でもうまく使用しています。
<?xml version="1.0" encoding="utf-8" ?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*" http-methods="*">
<domain uri="http://*" />
<domain uri="https://*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true" />
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
これは、あなたが使用しようとしているAPIがオンになっているドメインのルートにclientaccesspolicy.xmlファイルに配置する必要があります。
私が思いついたもう一つの解決策は、X-HTTP-Method-Override
ヘッダーにRestSharp
を設定してPOSTリクエストを送信することです。
これは、クライアントコードを変更するだけで、サーバーには使用できないclientaccesspolicy.xml
がある場合にも役立ちます。私はこのコード
if (request.Method == Method.PUT || request.Method == Method.DELETE)
{
request.AddHeader("X-HTTP-Method-Override", request.Method.ToString());
request.Method = Method.POST;
}
恐ろしいを使用し、私のAPIクラスで
、 'HTTP-methods'属性については知りませんでした。ありがとう、これは 'X-HTTP-Method-Override'を私にとっては不要にします。 – Timm