ASP.NET Core Web API處理HttpResponseMessage類型返回值的問題


在將我們的 web api 從 .NET Framework 遷移至 .net core(asp.net core 1.1)之后,遇到一個問題。

之前返回值類型為 HttpResponseMessage 的 web api,比如:

[HttpGet]
public async Task<HttpResponseMessage> Get()
{
    return await _httpClient.GetAsync($"...");
}

(注:這個 web api 的用途是直接將 HttpClient 調用后端 web api 的結果返回給調用客戶端)

原本會返回 json 格式的業務數據,現在返回的卻是對 HttpResponseMessage 自己的 json 序列化數據:

{
  "version": {},
  "content": {},
  "statusCode": 200,
  "reasonPhrase": "OK",
  "headers": [],
  "requestMessage": {
    "version": {},
    "content": null,
    "method": { "method": "GET" },
    "requestUri": "",
    "headers": [],
    "properties": {}
  },
  "isSuccessStatusCode": true
}

驢頭不對馬嘴。

后來在 stackoverflow 上找到了解決方法 —— ASP.NET Core HTTPRequestMessage returns strange JSON message ,用回答中的方法成功解決了這個問題。

解決方法如下:

1)在 .csproj 中添加下面的配置,為了可以安裝第2步中的 nuget 包(asp.net core 2.0不需要添加這個配置)

<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8</PackageTargetFallback>

2)安裝 nuget 包 Microsoft.AspNetCore.Mvc.WebApiCompatShim

3)在 Startup -> ConfigureServices 中,在 AddMvc() 之后添加 AddWebApiConventions() 即可:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddWebApiConventions();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM