セットアップのHttpContext HTTPClient.PostAsJsonAsync経由で呼び出さJsonConverterでは使用できません
- 私が使用して、ウェブのエンドポイントへの呼び出しを行うWebAPIのコントローラーを、しましたHttpClient.PostAsJsonAsync
- 、のは言わせていますコントローラメソッドのレスポンスとWebエンドポイントへのリクエストは同じエンティティタイプです
- このエンティティタイプに対してカスタムJsonConverterが登録されました。 HttpClient.PostAsJsonAsync、HttpContext.CurrentがNULLである時に、コンバータのWriteJsonメソッドが呼び出されたときに、エンティティをシリアル化するために:私はこのコンバータ
問題でのHttpContextにアクセスするためのユースケースを持っています。
しかし、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