Silverlight: HTTP DELETE and PUT методы с RestSharp


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

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

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

2 2

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>

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

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