Silverlight: HTTP DELETE and PUT methods with RestSharp

跟風遠走 提交于 2019-12-20 03:17:54

问题


I wanted to access an internal REST API from Silverlight, but it turns out that I am not allowed to use POST or DELETE as the HTTP method for my request.

Doing so always resulted in a SecurityException.

What is the recommended way to use REST apis with Silverlight?


回答1:


SecurityException probably means the API doesn't have the proper clientaccesspolicy.xml file in place. Here's an example of a very lenient one that allows all HTTP methods and headers. We have used this successfully for our API (which is popular, though I don't know how much traffic we get from 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>

This needs to be placed in a clientaccesspolicy.xml file at the root of the domain the API you are trying to use is on.




回答2:


Another solution I came up with is setting in RestSharp the X-HTTP-Method-Override header, and just send POST request.

This might also be useful if you can just modify the client code, but the server has an unusuable clientaccesspolicy.xml.

In my API class I use this code

if (request.Method == Method.PUT || request.Method == Method.DELETE)
{
    request.AddHeader("X-HTTP-Method-Override", request.Method.ToString());
    request.Method = Method.POST;
}


来源:https://stackoverflow.com/questions/9616856/silverlight-http-delete-and-put-methods-with-restsharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!