УстановкаHttpContext недоступен в JsonConverter вызывается через HTTPClient.PostAsJsonAsync
- У меня есть контроллер WebAPI, что делает вызов на веб-конечной точки, используя HttpClient.PostAsJsonAsync
- Допустим, что ответ метода контроллера и запрос к веб-конечной точке - это тот же тип объекта
- У меня есть пользовательский JsonConverter, зарегистрированный для этого типа сущности. У меня есть случай использования для доступа к HttpContext в этом преобразователе
Этот вопрос: когда метод WriteJson преобразователя в вызове, сериализации объект во HttpClient.PostAsJsonAsync, HttpContext.Current является NULL.
Однако, когда тот же поток вызывается при сериализации объекта в ответе WebAPI, контекст доступен в порядке.
С кем-либо сталкивались с подобными проблемами раньше? Я не уверен, в чем причина этой проблемы и какие могут быть возможные решения/обходные пути.
Я могу воспроизвести это поведение с помощью примера проекта WebAPI. Вот соответствующий код ножницы:
[JsonConverter(typeof(EntityConverter))]
public interface IEntity
{
}
public class Entity : IEntity
{
}
public class EntityConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// httContext is NULL when deserializing the HttpClient request entity
var httpContext = HttpContext.Current;
var principal = httpContext?.User;
Console.WriteLine("");
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return new Entity();
}
public override bool CanConvert(Type objectType)
{
return typeof(Entity) == objectType;
}
}
public class ValuesController : ApiController
{
// POST api/values
public async Task<HttpResponseMessage> Post([FromBody]string value)
{
HttpClient client = new HttpClient();
var message = await client.PostAsJsonAsync("http://example.com", new Entity());
Console.WriteLine(message);
return Request.CreateResponse(HttpStatusCode.Created, new Entity());
}
}
Не могли бы вы просто попробовать с полным пространством имен - System.Web.HttpContext.Current – Developer