我想从 Silverlight 访问内部 REST API,但事实证明我不允许使用 POST 或 DELETE 作为我的请求的 HTTP 方法。
这样做总是会导致SecurityException
.
将 REST API 与 Silverlight 一起使用的推荐方法是什么?
我想从 Silverlight 访问内部 REST API,但事实证明我不允许使用 POST 或 DELETE 作为我的请求的 HTTP 方法。
这样做总是会导致SecurityException
.
将 REST API 与 Silverlight 一起使用的推荐方法是什么?
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;
}