Silverlight:使用RestSharp的HTTP DELETE和PUT方法

时间:2012-03-08 11:21:20

标签: silverlight rest silverlight-4.0 restsharp clientaccesspolicy.xml

我想从Silverlight访问内部REST API,但事实证明我不允许使用POST或DELETE作为我的请求的HTTP方法。

这样做总会导致SecurityException

在Silverlight中使用REST apis的推荐方法是什么?

2 个答案:

答案 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;
}