【问题标题】:Cross domain problems with my POST function我的 POST 函数的跨域问题
【发布时间】:2014-04-01 08:02:05
【问题描述】:

我有一个 MVC REST Web API,它的方法如下所示:

 public HttpResponseMessage PostBook(DtoBooks Book)
        {
            if (Book == null)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
            Book.Id = Guid.Empty;
            BookManager.Instance.Add(Book);
            var response = Request.CreateResponse(HttpStatusCode.Created, Book);
            return response;
        }

它使用 IIS 托管在不同的域中。

当我想测试做一个帖子时,我输入以下 js:

jQuery.ajax({
                type: "POST",
                url: "http://domain-2:9090/api/Values/",
                dataType: "json",
                data: { CallToActionUrl: 'http://domain-2/', Message: 'Hello World!', OpenInModal: false, Status: 0, TargetUser: 'domain2\admin', TimeStamp: '2014-02-28', Type: 0 },
                success: function (data) {
                    alert("success")
                },
                error: function (data) {
                    alert("Fail")
                }
            }); 

当我导航到http://domain-2:8080/ 时,我可以运行这个 ajax 并且它运行良好! 但是当我尝试在不同的域上使用它时,比如说 domain-3,它会失败。

我试过CORS,它适用于IE9以外的所有浏览器..

有什么解决办法吗?非常感谢。

【问题讨论】:

  • 如果您尝试在 IE9 中进行跨域 ajax 请求,您需要使用 XDomainRequest 而不是 XMLHttpRequest。有一个包装 XDR 的 jQuery 插件。您应该知道 XDR 有一些明显的限制。另一种选择是使用这样的库:github.com/jpillora/xdomain.

标签: ajax json api rest cross-domain


【解决方案1】:

【讨论】:

  • 修改了答案并添加了一些链接。
  • 它们都不起作用或与我正在做的类型不同,我正在做一个 POST 并且不能使用 JSONP 并且使用 CORS 它不适用于 IE9。
【解决方案2】:

您的错误消息是否提到了有关跨域策略的内容? 我遇到了类似的问题,并收到了该消息。

尝试在您的 webservice 文件夹中创建一个文件 crossdomain.xml 并包括以下内容:

<?xml version="1.0"?>
<\!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

您可能希望将 * 更改为另一个更具限制性的值。但如果可行的话,你可以从那里开始工作

【讨论】:

  • 您的回答仅适用于闪存。这个问题与 Flash 无关。
  • @Ray Nicholus 我不同意。我的回答不仅适用于闪存。例如,它也适用于 Silverlight。它可能不适用于 Obsivus 问题,但它可能适用于寻找答案的其他人。你的说法不准确
  • 好的,我收回这一点-您的答案仅适用于与原始问题完全无关的过时技术。更好?
  • 它们现在已经过时了,并且在我发布答案后对问题进行了编辑。尽管如此,它仍然可以帮助仍然使用过时技术维护应用程序的人。它确实发生了......所以我不打算继续这个争论。开心
猜你喜欢
  • 2019-03-29
  • 2020-11-06
  • 2017-10-09
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2011-06-24
相关资源
最近更新 更多