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



我想从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;
}

相关内容

  • 没有找到相关文章

最新更新