我想从Silverlight访问内部REST API,但结果是不允许使用POST或DELETE作为请求的HTTP方法。
这样做总是导致SecurityException
。
在Silverlight中使用RESTapi的推荐方式是什么?
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文件中。
我提出的另一个解决方案是在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;
}