簡體   English   中英

ajax POST調用不同域上的webAPI

[英]ajax POST call to webAPI on different domain

我已經閱讀了許多關於“不同域名上的POST請求”問題的“解決方案”,也稱為“跨域帖子”,但我仍然無法讓它像他們說他們修復它一樣。

從閱讀有關此問題的所有文章,我現在知道為什么會發生這種情況,但我仍然需要它在我的項目中以安全的方式工作而不使用黑客移動或此類事情。 我想如果有人知道如何使它有效,幫助我們,我的意思是'我們',因為我相信仍然有人沒有彌補。

我的情況:我有一個托管在domainA上的webapp,它調用了對domainB(mvc4 webAPI)的ajax調用。 ajax post call看起來像這樣:

var profile = { Id:"1234567890", Name:"Name_01"}
$.ajax({
  type: "POST",
  url: 'http://domainB/api/Profile',
  data: JSON.stringify(profile)
});

@domainB我以前用來設置自定義響應標頭:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*"/>
        <add name="Access-Control-Allow-Headers" value="X-Requested-With" />
        <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS"/>
      </customHeaders>
    </httpProtocol>
</system.webServer>

@domainB webAPI post方法我有這個:

public void Post(dynamic newProfile)
{
...
}

所以在激活/啟動ajax調用時,在webAPI項目的調試模式下我得到SerializationException Operation could destabilize the runtime webAPI中JsonFX.Serilization.DataWriter Operation could destabilize the runtime ,並且我在瀏覽器中出錯了

XMLHttpRequest cannot load http://domainA/api/Profile. Origin http://domainB is not allowed by Access-Control-Allow-Origin.

我正在捕獲請求並對Fiddler做出響應,我發現響應端根本沒有Access-Control-Allow標頭。

我寫了我正在使用的內容,現在因為我沒有弄清楚我應該怎么做才能讓ajax post調用從domainA到domainB,或者是什么才是真正的解決方案。

而不是嘗試依賴各種可用的腳本/解決方法來執行跨域調用,為什么不在您自己的域上創建Web方法。

你可以用你的AJAX調用它。

然后讓您自己的Web方法執行對其他域的調用 - 這不會遇到與瀏覽器執行調用相同的安全問題。

所以你的電話會是這樣的:

瀏覽器AJAX調用 - >您自己的Web方法 - >調用其他域服務 - >結果返回到您的方法 - >您的方法返回到您的瀏覽器。

聽起來它可能是CORS預檢請求的問題。 嘗試了解在: http://www.html5rocks.com/en/tutorials/cors/http://remysharp.com/2011/04/21/getting-cors-working/HTTP:// WWW .w3.org / TR / CORS /

無論如何......在非簡單的AJAX請求的情況下,瀏覽器首先向您的URL發出OPTIONS請求,您需要處理該URL並返回預期的結果。 如果瀏覽器的OPTIONS響應正常,則它會首先發送您希望它發送的實際POST請求。 因此,如果您只有POST的處理程序而不是OPTIONS(在您的服務器上),那么您可能無法正確處理預檢請求(OPTIONS)並且一切都崩潰了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM