Silverlight: методы HTTP DELETE и PUT с помощью RestSharp - PullRequest
2 голосов
/ 08 марта 2012

Я хотел получить доступ к внутреннему API REST из Silverlight, но оказалось, что мне не разрешено использовать POST или DELETE в качестве метода HTTP для моего запроса.

Это всегда приводило к SecurityException.

Каков рекомендуемый способ использования REST apis с Silverlight?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

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>

Это должно быть помещено в файл clientaccesspolicy.xml накорень домена, к которому подключен API, который вы пытаетесь использовать.

0 голосов
/ 09 марта 2012

Другое решение, которое я придумал, это установить в 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;
}
...