2012-01-25 88 views
10

我正在開發一個應用程序,其中HTML和JavaScript塊傳遞到不同的客戶端。我能夠通過增加獲取HTML/JavaScript的塊以下,以網絡配置文件:跨域的帖子到ASP.Net MVC應用程序

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
      <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 

這是做GETS偉大​​的工作。我快到的問題是這樣做的POST使用jQuery跨域:

 $.ajax(
    { 
     type: 'POST', 
     url: url, 
     crossDomain: true, 
     data: JSON.stringify(data), 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function(responseData, textStatus, jqXHR) 
     { 
      alert('Success'); 
     }, 
     error: function (responseData, textStatus, errorThrown) 
     { 
      alert('POST failed.'); 
     } 
    }); 

我會擁有大量的客戶消耗我的應用程序(希望)。我想過使用代理,但我沒有控制客戶端服務器,所以我無法安裝httpHandler來充當代理。

關於如何將來自不同客戶端的json數據發佈到我的ASP.Net MVC應用程序的任何建議?

回答

5

我撥弄着我的Ajax調用,它似乎是工作(與上面的Ajax調用):

 $.ajax(
    { 
     type: 'POST', 
     url: url, 
     crossDomain: true, 
     data: data, 
     dataType: 'json', 
     success: function(responseData, textStatus, jqXHR) 
     { 
      alert('success'); 
     }, 
     error: function (responseData, textStatus, errorThrown) 
     { 
      alert('POST failed.'); 
     } 
    }); 

我刪除 「的contentType: '應用/ JSON'」 和「JSON.stringify(。 ..)「電話,我可以發佈到服務器。

我不知道如何解釋爲什麼它的工作。有任何想法嗎?是否有任何安全問題?我在我的筆記本電腦上完成了這一切。我通過IIS 7設置了2個不同的網站。這會有所作爲嗎?

0

你有兩個選擇,在dataType中你可以放置文本或jsonp而不是json。如果你給我們和你發送的數據的例子會更容易。

問候

1

當您指定的跨域屬性設置爲「真」,數據類型屬性被設置爲JSONP。然而,在MVC方面,您將需要一種方法來處理這個jsonp。您可能需要查看以下計算器文章:ASP.net MVC returning JSONP

2

內部通過注入指向URL的<script>標記獲取JSONP響應(跨域請求的默認類型)。因此,JSONP只能使用GET方法。其他方法將被忽略並回退到GET

0

如果您可以控制包含哪些JS庫,那麼最好的方法是使用許多跨域通信庫中的一個。客戶端(您的案例中的MVC應用程序)必須將其配置爲接受此類請求,在大多數情況下,它意味着在接受方擁有相同的庫。

到目前爲止我發現的最好的是EasyXDM。沒有太多限制,並根據瀏覽器功能進行調整。但是你必須在兩個互相交流的應用上都擁有它。