Khi cố gắng để một đối tượng trong một hành động trong một điều khiển nó lẻ tẻ có vẻ là null. Tôi phát hiện ra rằng đó là do số ReadAsStringAsync()
trong ghi đè SendAsync()
của số DelegatingHandler
. Vấn đề là với nội dung. Khi khách hàng của tôi gửi một nội dung nội dung và nó được đọc trong trình ghi nhật ký, nó không bao giờ được đọc bởi Trình điều khiển tác vụ điều khiển (hoặc có thể ở đâu đó trong số JsonFormatter
). Tôi nghi ngờ các cuộc gọi tiếp theo để Content.ReadAsStringAsync()
không ném một ngoại lệ nhưng cũng không trả lại cơ thể nội dung dự kiến (một số thông tin được trả lại nói rằng đọc async được hoàn thành).HttpRequestMessage.Content bị mất khi nó được đọc trong một DelegatingHandler đăng nhập trong ASP.Net Web API
Nhưng vấn đề của tôi vẫn còn kể từ khi tôi muốn đọc một tham số [FromBody]
trong một hành động và nó là vô giá trị khi RaceCondition Content.ReadStringAsync
được thắng bởi DelegatingHandler
. Khi JsonFormatter
thắng nó mặc dù, tôi nhận được đối tượng nhưng đó là hiếm (chỉ khi khởi động dịch vụ).
Đây là mã DelegatingHandler
tôi:
public class LogHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var apiRequest = new WebApiUsageRequest(request);
WriteLog(apiRequest);
request.Content.ReadAsStringAsync().ContinueWith(t =>
{
apiRequest.Content = t.Result;
WriteLog(apiRequest);
});
return base.SendAsync(request, cancellationToken).ContinueWith(task =>
{
var apiResponse = new WebApiUsageResponse(task.Result);
apiResponse.Content = task.Result.Content != null ? task.Result.Content.ReadAsStringAsync().Result : null;
WriteLog(apiResponse);
return task.Result;
});
}
}
Có ai có một đầu mối để các giải pháp của vấn đề này?
Quên đề cập đến đây là RC. Tôi nghi ngờ quan sát vẫn giữ nguyên trong RTM quá – Sando