目前開發需要呼叫第三方專案的介面,ajax post 呼叫時出現了跨域問題,但對方不愿意在服務器端做相應的配置解決,那我要怎樣解決呢?
uj5u.com熱心網友回復:
好像只能對方配置了,架設可以隨便跨域提交資料,網站入侵豈不是很容易uj5u.com熱心網友回復:
你可以在服務器端呼叫他們的介面。uj5u.com熱心網友回復:
是的,跨域只是現代 html5 瀏覽器的標準。你的前端訪問你自己的服務器,然后你的服務器中轉一下“問、答”環節,就不存在跨域了。uj5u.com熱心網友回復:
再說明白一點兒,要知道“跨域”是你自己的應用系統,跑在你的客戶瀏覽器上,這個時候出現的提示。也就是說其實用戶終端才是限制跨域的根本機制,對方服務器端只是沒有配合來輸出一個標志(配置一下“隨便的一個字串”)。也就是說對方服務器端人員可以認為是他們懶得支持,這是可以想象得到的。說白了就是對方服務器人員接入的太少,經驗太少。但是不影響他們狹隘認為跨域,這并沒有任何技術。uj5u.com熱心網友回復:
我后端語言是用C#,請問可以寫個C#例子給我參考一下嗎?
uj5u.com熱心網友回復:
我后端語言是用C#,請問可以寫個C#例子給我參考一下嗎?
uj5u.com熱心網友回復:
例如你的服務器端寫一個通用呼叫,例如
var web = new WebClient();其中 url 是目標服務地址,body 是你要 post 提交的資料,這樣就能獲得回傳結果 string。而你自己的 web 服務網站讓自己的前端頁面訪問,網站從請求內容中封裝出 url 和 data,再把 resultStr 封裝(或則決議、封裝)之后回傳給自己的前端。
var result = web.UploadData(url, Encoding.UTF8.GetBytes(body));
var resultStr = Encoding.UTF8.GetString(result);
如果對方服務器有什么特別的“癖好”,你可以加上一些訊息控制資訊。例如
var web = new WebClient();這樣將你的服務器作為一個中臺系統。
web.Headers.Set(HttpRequestHeader.Cookie, cookie);
if (referer == null)
referer = "http://10.134.111.111:8000/business/Edit.do?bizType=NEW";
web.Headers.Set(HttpRequestHeader.Referer, referer);
web.Headers.Set(HttpRequestHeader.Host, "10.134.111.111:8000");
web.Headers.Set(HttpRequestHeader.Accept, "*/*");
web.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN");
web.Headers.Set("x-requested-with", "XMLHttpRequest");
web.Headers.Set(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded; charset=UTF-8");
web.Headers.Set(HttpRequestHeader.Host, "10.134.111.111:8000");
web.Headers.Set(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)");
var result = web.UploadData(url, Encoding.UTF8.GetBytes(body));
var resultStr = Encoding.UTF8.GetString(result);
uj5u.com熱心網友回復:
對方不愿意改服務器,其實對方要解決就是一句話的事情,加個header允許.死活不愿意的話,可以自己加個代理服務器,客戶端請求它,代理在服務端請求對方.不過這還是不必要的麻煩.
最佳方案還是對方改,這個也是有道理的.
如果對方做介面服務的,連這個小問題都沒解決,那還怎么提供介面服務,那些大廠的公共API服務,在呼叫的時候還能有這問題?
uj5u.com熱心網友回復:
nginx可以解決uj5u.com熱心網友回復:
對方無解的情況下你有3個解決方案.第一,前臺使用路由,vue什么的 里面會有代理之類的東西.. 比如/api 就訪問其他站點 配置一下之后. 看起來就是一個site 你在ajax就不會有問題了.
第二,你ajax你自己的服務端,然后通過服務端的代碼 去請求對方的介面,你的服務端作為一個中轉(這種比較常見).
第三,后端使用ng,設定一個路徑,讓ng指向另外的站點, root指向你的站點.. 這樣訪問 就跟第一個是一樣的了.
uj5u.com熱心網友回復:
最好還是跟第三方商量uj5u.com熱心網友回復:
總之,你這屬于服務器跨域了解下 反向代理,跨域資源共享
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/22823.html
標籤:ASP.NET
上一篇:.net對接cas認證遇到的servername問題
下一篇:winform如何實作如圖效果
