我正在尝试从HTML小部件中跨域调用Web服务。这似乎行不通。它在同一域下工作得很好。我正在尝试在 Orchard 中创建一个登录页面,该页面可用于登录另一个域上的软件。Web 服务正在验证用户凭据并返回一个布尔值,然后生成用户身份验证。
我读到我可以使用HTTP处理程序或其他Web服务(在Orchard端)来调用另一个域上的Web服务,但我对MVC或Orchard不够熟悉,无法做到这一点。如何将其中一个添加到我的 Orchard Web 应用程序?
来自客户端代码中的跨域调用在所有主流浏览器中都是禁忌。你可以
- 使用 CORS,即在 Web 服务响应中
Access-Control-Allow-Origin
标头设置为http://your-caller-domain.com
,以允许来自您的网站域的请求 - 使用 JSONP 技术
- 在应用程序中创建自定义代理 API(使用纯 ASP.NET MVC 控制器或 WebAPI 控制器),该 API 将使用类在服务器端执行调用
WebClient
并将响应返回给您。
选项按从最佳到最差的顺序排列。大多数浏览器都支持CORS浏览器,除了IE8/9(通过XDomainRequest
部分支持)和更早版本。不过,有一些解决方法。
请注意,前两个涉及 Web 服务端的更改 - 如果您做不到,选项 3. 是唯一剩下的一个。