HTTP Get リクエストを送信した場合:
/api/Company/1
の内容を確認し、jsonOwinMiddleware
を使用している場所があります。context
path
IAsyncRequest<T>
どの非同期リクエストを使用するかを知るために、パスのマッピングがありType
ますIAsyncRequest<T>
var mappings = new Dictionary<string, Type> { ["api/Company/{id}"] = typeof(GetCompanyRequest) }
Type request;
var result = mappings.TryGetValue(context.Requst.Path.Value, out request);
を使用しJObject
て のインスタンスを作成しますGetCompanyRequest
var get = new JObject { ["id"] = "1" /* obtained from the url */ }
var instantiatedRequest = JObject.ToObject(request);
私が使用する理由JObject
は、PUT および POST 要求の場合、JSON 本体を直接要求に逆シリアル化するためです。
object instantiatedRequest
パズルの最後のピースは、メディエーター パイプラインを介してこれを送信しています。明らかTask<T> SendAsync<T>(IAsyncRequest<T> request)
にうまくいきません。
興味深いことに、ユーザーにT
ポストバックするために常にシリアル化するため、知る必要はありません。string
では、これに対応するために署名Task<object> SendAsync(object request)
を現在のメディエーター フレームワークに組み込むことはできますか? (求めているのではなく、可能ですか?)
ソースコードを見る
私はこれを見つけましたmediator.cs
private TWrapper GetHandler<TWrapper, TResponse>(object request, Type handlerType, Type wrapperType)
{
var requestType = request.GetType();
var genericHandlerType = _genericHandlerCache.GetOrAdd(requestType, handlerType, (type, root) => root.MakeGenericType(type, typeof(TResponse)));
var genericWrapperType = _wrapperHandlerCache.GetOrAdd(requestType, wrapperType, (type, root) => root.MakeGenericType(type, typeof(TResponse)));
var handler = GetHandler(request, genericHandlerType);
return (TWrapper) Activator.CreateInstance(genericWrapperType, handler);
}
private object GetHandler(object request, Type handlerType)
{
try
{
return _singleInstanceFactory(handlerType);
}
catch (Exception e)
{
throw BuildException(request, e);
}
}
その 2 番目GetHandler
には必要なパラメーターがあり、最初のパラメーターは によって呼び出されるSendAsync
ものです。何かを貼り付けても問題はありません。
それを行うことに懸念はありますか?