代碼很簡單,就是通過 HttpClient 請求一個 JSON ,再回傳到客戶端,用以解決 JSON 跨域。
Program.cs 沒有動,Startup.cs 中就是如下代碼,其它沒有添加任何檔案和代碼:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
HttpClientHandler handler = new ()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};
HttpClient hc = new(handler);
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async httpContext =>
{
if (httpContext.Request.Query.ContainsKey("url"))
{
string url = httpContext.Request.Query["url"];
HttpResponseMessage r = hc.GetAsync(url).Result;
httpContext.Response.ContentType =
(string.IsNullOrWhiteSpace(r.Content.Headers.ContentType.MediaType) ? "application/json" : r.Content.Headers.ContentType.MediaType)
+ "; charset=" +
(string.IsNullOrWhiteSpace(r.Content.Headers.ContentType.CharSet) ? "UTF-8" : r.Content.Headers.ContentType.CharSet);
await httpContext.Response.WriteAsync(await r.Content.ReadAsStringAsync());
}
else
{
await httpContext.Response.WriteAsJsonAsync(new { err = "empty url" });
}
});
});
}
本機環境:win10 v2004 ; .Net Core SDK 5.0.102
服務器環境:win server 2012 r2; ASP.NET Core Runtime 5.0.2
在本機測驗正常,url 引數為一個頁面,能正常回傳 JSON 資料:
傳至服務器端后,url 引數仍是那個頁面,回傳的是那個 url 生成的出錯頁面頁不是 JSON 資料。并不是那個 url 對服務器有限制,因為在服務器上用瀏覽器直接訪問那個地址,可以正常回傳 JSON 資料。
訪問的那個 url 所在服務器為 Apache-Coyote/1.1
是我的代碼有問題,還是環境有問題?
uj5u.com熱心網友回復:
比對一下你用HttpClient發送的請求和直接瀏覽器請求的區別吧,我估計大概率是出現在請求的頭部,特別是User-Agent部分,服務器端可能有分析頭部的代碼而你用HttpClient請求的時候并沒有單獨處理頭部的資訊,所以瀏覽器能請求而你的代碼不行,瀏覽器請求的時候是帶頭部的,我之前就碰到過類似的問題uj5u.com熱心網友回復:
開發通訊程式要從捕獲報文入手。使用至少一種 http 上、下行訊息捕獲工具。當然你首先要學習過、看得懂 http 訊息。uj5u.com熱心網友回復:
早期我們使用 Fiddler 作為必備工具。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/258282.html
標籤:ASP.NET
