내 요청/응답을 기록하고 싶지만 문제가 있습니다. 내 요청이 이유를 모르겠다.C# HttpClient tracing stuck
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
사람이 어떤 빛을 넣어 설명해 주시겠습니까 : 내 컨트롤러 내부
나는
public class LoggingHandler : DelegatingHandler
{
StringBuilder sb = new StringBuilder();
public LoggingHandler()
: base(new HttpClientHandler())
{
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
sb.AppendLine("Request:");
sb.AppendLine(request.ToString());
if (request.Content != null)
{
sb.AppendLine(await request.Content.ReadAsStringAsync());
}
sb.AppendLine();
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
sb.AppendLine("Response:");
sb.AppendLine(response.ToString());
if (response.Content != null)
{
sb.AppendLine(await response.Content.ReadAsStringAsync());
}
sb.AppendLine();
return response;
}
public string GetLog()
{
return sb.ToString();
}
}
내 디버그에 붙어
var log = new LoggingHandler();
using (var client = new HttpClient(log))// <-- problem here
{
string baseUrl = ConfigurationManager.AppSettings["apiBaseAddress"];
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
foreach (var website in websitesList)
{
string stringtime = TimeHandler.GetCurrentDateTime();
var userModel = new RegisterModel()
{
// my user model
};
var content = new FormUrlEncodedContent(new[]
{
//encoding model
});
try
{
HttpResponseMessage response = client.PostAsync("api/UserDetails/Register", content).Result;
//tResult.URL = response.RequestMessage.RequestUri.OriginalString;
tResult.URL = website.URL;
tResult.Result = response.ReasonPhrase;
var statusCode = response.StatusCode.ToString();
.
.
.
.
}
tResult.TestLog = log.GetLog();//*****
resultList.Add(tResult);
}
}
내 LoggingHandler이 코드를했습니다 왜 막혔어?
어떤 도움을 주셔서 감사합니다.
LoggingHandler.SendAsync는 어디에 호출됩니까? ASP.Net에는 await/async 패턴에 대한 몇 가지 제한 사항이 있습니다. 어딘가에 교착 상태가 있다고 가정합니다. – gobes
LoggingHandler 유형 인 Log를 작성하고 있습니다. var log = new LoggingHandler(); 그리고 내가 httpclient (log)를 만드는 중 – Bglen
알겠지만, 당신은'SendAsync'가 아닌'PostAsync'를 당신의 컨트롤러에서 호출하고 있습니다. 그리고 Nkosi가 말했듯이, 기다리는 방법으로'.Result '(또는 어떤 블로킹 메소드 나 속성)를 호출하는 것은 ASP.Net에서 매우 나쁘고 대부분의 시간이 교착 상태에 빠지게됩니다. – gobes