2014-02-28 91 views
0

我有一个MVC的Web休息API,有看起来像这样的方法:跨域问题,我的POST功能

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和它完美的作品! 但是,当我尝试在不同的域上使用它可以说域-3,它会失败。

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

对此有任何解决方案?将不胜感激。

+0

如果你试图在IE9中做交叉源ajax请求,你需要使用'XDomainRequest'而不是'XMLHttpRequest'。有一个包装XDR的jQuery插件。您应该知道XDR有一些显着的限制。另一个选择是使用这样的库:https://github.com/jpillora/xdomain。 –

回答

0
+0

我不使用apache – Obsivus

+0

修改了答案并添加了一些链接。 – kds

+0

他们都不工作或不是我在做的相同类型,我正在做一个POST并且不能使用JSONP和使用CORS它不会与IE9一起使用。 – Obsivus

-1

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

尝试在你的web服务文件夹中创建文件的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> 

您可能需要改变*另一个更严格的价值。但你可以从那里开始工作,如果它工作的话

+0

您的回答仅适用于闪光灯。这个问题不是关于闪光。 –

+0

@ Ray Nicholus我不同意。我的回答不仅适用于闪光灯。它也适用于例如Silverlight。它可能不适用于Obsivus问题,但它可能适用于其他人寻找答案。您的评论不准确 –

+0

好的,我回过头来看 - 您的回答仅适用于与原始问题完全没有关系的过时技术。更好? –