/// <summary> /// 构造httpcontext /// </summary> /// <param name="entryContext"></param> /// <returns></returns> internal static HttpContext CreateHttpContext(HttpContext entryContext, JsonRpcRequest request) { var context = new InMemoryHttpContext(entryContext.Features) { RequestServices = entryContext.RequestServices }; var uri = new Uri(request.Method, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { uri = new Uri($"http://localhost/{request.Method.TrimStart('/')}"); } context.Request.Path = uri.AbsolutePath; context.Request.QueryString = new QueryString(uri.Query); PropertyDescriptorCollection properties = null; var isPost = request.Params != null && (properties = TypeDescriptor.GetProperties(request.Params)).Count > 0; context.Request.Method = isPost ? "Post" : "Get"; if (isPost) { context.Request.Headers.Remove("Content-Type"); context.Request.Headers.Add("Content-Type", "application/json"); foreach (var prop in request.Properties) { if (prop.Key == CobMvcDefaults.UserAgentValue) { context.Request.Headers["User-Agent"] = prop.Value; continue; } context.Request.Headers[prop.Key] = prop.Value; } var ms = context.Request.Body = new MemoryStream(); using (var sw = new StreamWriter(ms, new UTF8Encoding(false), 512, true)) { if (properties.Count == 1) { sw.Write(JsonConvert.SerializeObject(properties[0].GetValue(request.Params)));// } else { if (properties.Count > 1 && !entryContext.RequestServices.GetRequiredService <IOptions <CobMvcOptions> >().Value.EnableCobMvcParametersBinder) { throw new Exception("find many parameters from body, please set CobMvcOptions.EnableCobMvcParametersBinder"); } sw.Write(JsonConvert.SerializeObject(request.Params));//todo:直接Pramas将放入Items,后面由自定义参数绑定赋值参数 } } ms.Position = 0; } return(context); }
/// <summary> /// 构造httpcontext /// </summary> /// <param name="entryContext"></param> /// <returns></returns> internal static HttpContext CreateHttpContext(HttpContext entryContext, JsonRpcRequest request) { var context = new InMemoryHttpContext(entryContext.Features) { RequestServices = entryContext.RequestServices }; var uri = new Uri(request.Method, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { uri = new Uri($"http://localhost/{request.Method.TrimStart('/')}"); } context.Request.Path = uri.AbsolutePath; context.Request.QueryString = new QueryString(uri.Query); PropertyDescriptorCollection properties = null; var isPost = request.Params != null && (properties = TypeDescriptor.GetProperties(request.Params)).Count > 0; context.Request.Method = isPost ? "Post" : "Get"; if (isPost) { context.Request.Headers.Remove("Content-Type"); context.Request.Headers.Add("Content-Type", "application/json"); var ms = context.Request.Body = new MemoryStream(); using (var sw = new StreamWriter(ms, new UTF8Encoding(false), 512, true)) { if (properties.Count == 1) { sw.Write(JsonConvert.SerializeObject(properties[0].GetValue(request.Params))); } else { sw.Write(JsonConvert.SerializeObject(request.Params)); } } ms.Position = 0; } return(context); }