我想从Silverlight访问内部REST API,但事实证明我不允许使用POST或DELETE作为我的请求的HTTP方法。
这样做总会导致SecurityException
。
在Silverlight中使用REST apis的推荐方法是什么?
答案 0 :(得分:2)
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文件中。
答案 1 :(得分:0)
我提出的另一个解决方案是设置RestSharp
X-HTTP-Method-Override
标头,然后发送POST请求。
如果您只能修改客户端代码,但服务器有一个不可用的clientaccesspolicy.xml
,这可能也很有用。
在我的API类中,我使用此代码
if (request.Method == Method.PUT || request.Method == Method.DELETE)
{
request.AddHeader("X-HTTP-Method-Override", request.Method.ToString());
request.Method = Method.POST;
}