2

我寧願避免討論HTTP動詞PUT和DELETE是否合適或過時,並着重討論實際使Silverlight在「強制」時使用的問題這些動詞。如何使HTTP PUT和DELETE在Silverlight 4中工作

我正在嘗試創建一個Silverlight 4客戶端應用程序,該應用程序調用具有PUT和DELETE動詞操作的現有REST Web服務。這項服務不會改變。

我添加以下語句到構造函數在我App.xaml.cs:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 

服務都有一個包含clientaccesspolicy.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

我現在用的是WebClient類來處理GET和POST請求。當我試圖對動詞/方法使用PUT或DELETE時,我得到一個模棱兩可的「安全錯誤」,這導致我添加上面的語句。

我見過各種帖子和博客文章,談論如何使用HttpWebRequest來解決這個問題,但還沒有找到一個實際上顯示如何從Silverlight客戶端進行這些(異步)調用的方法。

如果上面的代碼有問題,請告訴我。否則,如果您可以向我展示或向我指出一個演示如何實現這些請求的示例,我將非常感謝幫助。

+1

或許,如果你確實向我們展示了 「代碼」,它使用的HttpWebRequest – AnthonyWJones

回答

1

我已經解決了我的問題,但我仍然不能100%確定它爲什麼被修復。

根據同事的建議,我啓用了在瀏覽器外部運行應用程序並檢查設置,以便在瀏覽器外運行時要求提升信任度。該應用程序運行良好。我禁用了瀏覽器外運行,該應用仍然運行正常!

正如該設置所述,當在瀏覽器之外運行時,它需要提高信任度。所以,如果這是問題,那麼我不確定在瀏覽器中運行時是否應該修復我的問題。但它確實...

3

在您的clientaccesspolicy.xml文件中,您必須允許PUTDELETE HTTP動詞。

我通常允許所有HTTP動詞,它看起來像這樣給你原來的配置:

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*" http-methods="*"> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

注意添加http-methodsallow-from元素屬性。

相關問題