我想從Silverlight訪問內部REST API,但事實證明,我不允許使用POST或DELETE作爲HTTP請求的方法。Silverlight:使用RestSharp的HTTP DELETE和PUT方法
這樣做總是導致SecurityException
。
在Silverlight中使用REST apis的建議方法是什麼?
我想從Silverlight訪問內部REST API,但事實證明,我不允許使用POST或DELETE作爲HTTP請求的方法。Silverlight:使用RestSharp的HTTP DELETE和PUT方法
這樣做總是導致SecurityException
。
在Silverlight中使用REST apis的建議方法是什麼?
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 I類使用此代碼
if (request.Method == Method.PUT || request.Method == Method.DELETE)
{
request.AddHeader("X-HTTP-Method-Override", request.Method.ToString());
request.Method = Method.POST;
}
真棒,不知道的'HTTP-methods'屬性。謝謝,這使得我不需要X-HTTP-Method-Override。 – Timm 2012-03-09 08:32:34