dotnet core3.1 下使用HttpClient.PostAsync()在服務內部請求第三方服務時注意事項


命名空間

System.Net.Http

Post請求

1.如果參數是 ?phone="15071651111" 的形式發起的post請求 則webapi中 Controller 的方法需要加上 [FromQuery]

例:

string url = _userServiceUrl + "api/User/CheckOrCreate?phone=" + phone;
var response = await _httpClient.PostAsync(url, null);

webapi:

public async Task<IActionResult> CheckOrCreate([FromQuery]string phone)
{
    //dosomething...
}

2.如果參數是通過HttpContent發送的單個字符串則webapi中 Controller 的方法需要加上 [FromForm]

例:

var data = new FormUrlEncodedContent(new Dictionary<string, string> {{"phone",phone }});
var response = await _httpClient.PostAsync(url, data);

webapi:

public async Task<IActionResult> CheckOrCreate([FromForm]string phone)
{
    //dosomething...
}

3.如果參數是通過HttpContent發送的JSON則webapi中 Controller 的方法需要加上 [FromBody]

例:

string url = _userServiceUrl + "api/User/CheckOrCreate";
UserInfoDto dto = new UserInfoDto { Name = "Yuan", Phone = phone };
var data = new StringContent(JsonConvert.SerializeObject(dto),Encoding.UTF8,"application/json");

webapi:

public async Task<IActionResult> CheckOrCreate([FromBody]CheckOrCreateAppUserViewModel model)
{
    //dosomething
}

補充

4.如果參數是 ?phone="15071651111" 的形式發起的post請求 則webapi中 Controller 的方法也可以使用 [FromUri]

例:

string url = _userServiceUrl + "api/User/CheckOrCreate?phone=" + phone;
var response = await _httpClient.PostAsync(url, null);

webapi:

public async Task<IActionResult> CheckOrCreate([FromUri] XXXModel mode)
{
    //dosomething...
}

注意

控制器內不要聲明多個同名不同參且請求方式也一樣的控制器,否則會提示匹配多個路由的問題(也有可能是我路由沒有配好的原因)

image


免責聲明!

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



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