using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Net.Http.Headers;
using System.Threading.Tasks;
static async Task Main(string[] args)
var result = await LoginAsync(new LoginRequestDto()
Console.WriteLine(result);
private static async Task<string> LoginAsync(LoginRequestDto loginRequestDto)
using (LoggingHandler loggingHandler = new LoggingHandler(new HttpClientHandler()))
using (HttpClient client = new HttpClient(loggingHandler))
string endPoint = $"https://localhost:5001/api/GetParameter/FromBody";
HttpResponseMessage response = null;
#region 使用 JSON (Raw > JSON) 產生要 Post 的資料
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
var fooJSON = JsonConvert.SerializeObject(loginRequestDto);
using (var fooContent = new StringContent(fooJSON, Encoding.UTF8, "application/json"))
response = await client.PostAsync(endPoint, fooContent);
result = await response.Content.ReadAsStringAsync();
public class LoggingHandler : DelegatingHandler
public LoggingHandler(HttpMessageHandler innerHandler)
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken = default(CancellationToken))
Console.WriteLine(new String('-', 40));
Console.WriteLine(" " + "Request:");
Console.WriteLine(" " + request.ToString());
if (request.Content != null)
Console.WriteLine(" " + await request.Content.ReadAsStringAsync());
Console.WriteLine(new String('-', 40));
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
Console.WriteLine(new String('-', 40));
Console.WriteLine(" " + "Response:");
Console.WriteLine(" " + response.ToString());
if (response.Content != null)
Console.WriteLine(" " + await response.Content.ReadAsStringAsync());
Console.WriteLine(new String('-', 40));
#region 呼叫 Web API 會用到的類別
public class LoginRequestDto
public string Account { get; set; }
public string Password { get; set; }