Silverlight: HTTP DELETE and PUT методы с RestSharp
Я хотел получить доступ к внутреннему REST API от Silverlight, но оказалось, что мне не разрешено использовать POST или DELETE в качестве метода HTTP для моего запроса.
Это всегда приводило к SecurityException
.
Каков рекомендуемый способ использования REST API с Silverlight?
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; }