Silverlight 4.0 如何使HTTPPUT和DELETE在Silverlight4中工作
我宁愿避免陷入关于HTTP动词PUT和DELETE是合适的还是过时的争论,而将重点放在当“被迫”使用这些动词时实际使Silverlight工作的问题上 我正在尝试创建一个Silverlight 4客户端应用程序,该应用程序调用现有的REST web服务,该服务具有PUT和DELETE谓词操作。这项服务不会改变 我已将以下语句添加到我的App.xaml.cs中的构造函数中: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
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的“代码”,那么可能