Silverlight 4.0 如何使HTTPPUT和DELETE在Silverlight4中工作

Silverlight 4.0 如何使HTTPPUT和DELETE在Silverlight4中工作,silverlight-4.0,httpwebrequest,webclient,clientaccesspolicy.xml,httpverbs,Silverlight 4.0,Httpwebrequest,Webclient,Clientaccesspolicy.xml,Httpverbs,我宁愿避免陷入关于HTTP动词PUT和DELETE是合适的还是过时的争论,而将重点放在当“被迫”使用这些动词时实际使Silverlight工作的问题上 我正在尝试创建一个Silverlight 4客户端应用程序,该应用程序调用现有的REST web服务,该服务具有PUT和DELETE谓词操作。这项服务不会改变 我已将以下语句添加到我的App.xaml.cs中的构造函数中: WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientH

我宁愿避免陷入关于HTTP动词PUT和DELETE是合适的还是过时的争论,而将重点放在当“被迫”使用这些动词时实际使Silverlight工作的问题上

我正在尝试创建一个Silverlight 4客户端应用程序,该应用程序调用现有的REST web服务,该服务具有PUT和DELETE谓词操作。这项服务不会改变

我已将以下语句添加到我的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客户端进行这些(异步)调用的文章


如果上面的代码有问题,请告诉我。否则,如果您能向我展示或向我指出一个示例,演示如何实现这些请求,我将非常感谢您的帮助。

我已经解决了我的问题,但仍然无法100%确定为什么它会被修复

在一位同事的建议下,我启用了在浏览器外运行应用程序,并检查了在浏览器外运行时需要提升信任度的设置。应用程序运行良好。我禁用了浏览器,应用程序仍然可以正常运行


正如设置所说,当在浏览器外运行时,需要提高信任度。因此,如果这是问题所在,那么我不确定检查它是否可以解决在浏览器中运行时的问题。但是它确实…

在您的
clientaccesspolicy.xml
文件中,您必须允许
PUT
DELETE
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>

注意
allow from
元素上添加的
http方法属性。

Add

HttpWebRequest.RegisterPrefix(“http://”,WebRequestCreator.ClientHttp);
HttpWebRequest.RegisterPrefix(“https://”,WebRequestCreator.ClientHttp);


如果您真的向我们展示了使用HttpWebRequest的“代码”,那么可能