HeyGuys.NetCore
私はクライアントからの要求を受信して、直接アクセスのために開いていない他のサービスにこれらの要求をリダイレクトWEBAPIプロジェクトに取り組んでいます。
デフォルトでは、.NetはJsonリクエストパラメータを自動的にシリアル化および逆シリアル化するため、適切なサービスを呼び出す前に再シリアル化する必要があります。同じ問題は、サービス応答を受信するときに発生します。私はそれをユーザーに返信する前に逆シリアル化する必要があります。さもなければ.Netフレームワークはそれをもう一度シリアル化し、 "Json of Json"という応答を返します。
私はthis answerを見つけましたが、.NetCoreでは動作しません。そこで、Jsonオブジェクトを読み込んで返すだけの独自のModelBinderを作成しようとしました。
class JsonUnformatterBinderProvider : Microsoft.AspNetCore.Mvc.ModelBinding.IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
return new JsonUnformatterBinder(new SimpleTypeModelBinder(context.Metadata.ModelType));
}
}
と
class JsonUnformatterBinder : IModelBinder
{
private readonly IModelBinder _fallbackBinder;
public JsonUnformatterBinder(IModelBinder fallbackBinder)
{
_fallbackBinder = fallbackBinder;
}
public Task BindModelAsync(ModelBindingContext bindingContext)
{
string currMethod = bindingContext.ActionContext.HttpContext.Request.Method;
if ("POST".Equals(currMethod) || "PUT".Equals(currMethod))
{
string strData = new StreamReader(bindingContext.ActionContext.HttpContext.Request.Body).ReadToEnd();
bindingContext.Result = ModelBindingResult.Success(strData);
return Task.CompletedTask;
}
return _fallbackBinder.BindModelAsync(bindingContext);
}
}
このコードは、それが私の最初の試みであり、それは私の目的のためによく働いていた、非常に簡単です。しかし、私はまだ2番目のサービスの回答を取ってユーザーに返すときに "Json of Json"という問題が発生します。
私は基本的にこれを克服するために何ができるのかわからないので、ここで何らかの回避策を歓迎します。