2

我宁愿避免进入关于 HTTP 动词 PUT 和 DELETE 是否合适或过时的辩论,而是专注于在“被迫”使用这些动词时实际使 Silverlight 工作的问题。

我正在尝试创建一个 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 客户端进行这些(异步)调用的文章和博客文章。

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

4

3 回答 3

3

在您的clientaccesspolicy.xml文件中,您必须允许使用PUTDELETEHTTP 动词。

我通常允许所有 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-methods上添加的属性。allow-from

于 2012-03-13T14:14:36.497 回答
1

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

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

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

于 2011-09-19T20:03:48.120 回答
0

添加 HttpWebRequest.RegisterPrefix("http://",WebRequestCreator.ClientHttp); HttpWebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);

https://mattduffield.wordpress.com/2011/12/11/silverlight-specified-method-is-not-supported-on-this-request/

于 2017-11-07T08:45:40.220 回答