public async Task BeforeRequestAsyncTest() { var apiAction = new DefaultApiActionDescriptor(typeof(IMyApi).GetMethod("PostAsync")); var context = new TestRequestContext(apiAction, new { name = "laojiu", birthDay = DateTime.Parse("2010-10-10") }); context.HttpContext.RequestMessage.RequestUri = new Uri("http://www.webapi.com/"); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var attr = new JsonContentAttribute() { CharSet = "utf-16" }; await attr.OnRequestAsync(new ApiParameterContext(context, 0)); var body = await context.HttpContext.RequestMessage.Content.ReadAsUtf8ByteArrayAsync(); var options = context.HttpContext.HttpApiOptions.JsonSerializeOptions; using var buffer = new RecyclableBufferWriter <byte>(); JsonBufferSerializer.Serialize(buffer, context.Arguments[0], options); var target = buffer.WrittenSpan.ToArray(); Assert.True(body.SequenceEqual(target)); }
/// <summary> /// json内容 /// </summary> /// <param name="value">对象值</param> /// <param name="jsonSerializerOptions">json序列化选项</param> /// <param name="encoding">编码</param> public JsonContent(object?value, JsonSerializerOptions?jsonSerializerOptions, Encoding?encoding) : base(MediaType) { if (encoding == null || Encoding.UTF8.Equals(encoding)) { JsonBufferSerializer.Serialize(this, value, jsonSerializerOptions); } else { using var utf8Writer = new RecyclableBufferWriter <byte>(); JsonBufferSerializer.Serialize(utf8Writer, value, jsonSerializerOptions); Encoding.UTF8.Convert(encoding, utf8Writer.WrittenSpan, this); this.Headers.ContentType.CharSet = encoding.WebName; } }
public async Task JsonResultTest() { var apiAction = new DefaultApiActionDescriptor(typeof(ITestApi).GetMethod("JsonXmlAsync")); var context = new TestRequestContext(apiAction, "laojiu"); var responseContext = new ApiResponseContext(context); context.HttpContext.RequestMessage.Method = HttpMethod.Post; var model = new TestModel(); var jsonContent = new JsonContent(); context.HttpContext.ResponseMessage.Content = jsonContent; JsonBufferSerializer.Serialize(jsonContent, model, null); var attr = new JsonReturnAttribute(); await attr.OnResponseAsync(responseContext); var result = responseContext.Result as TestModel; Assert.True(model.Name == result.Name && model.Age == result.Age); }
/// <summary> /// 序列化参数值为utf8编码的Json /// </summary> /// <param name="context"></param> /// <param name="bufferWriter">buffer写入器</param> public static void SerializeToJson(this ApiParameterContext context, IBufferWriter <byte> bufferWriter) { var options = context.HttpContext.HttpApiOptions.JsonSerializeOptions; JsonBufferSerializer.Serialize(bufferWriter, context.ParameterValue, options); }
/// <summary> /// uft8的json内容 /// </summary> /// <param name="mediaType"></param> /// <param name="value">对象值</param> /// <param name="jsonSerializerOptions">json序列化选项</param> public JsonRpcContent(object?value, JsonSerializerOptions?jsonSerializerOptions, string?mediaType) : base(mediaType ?? MediaType) { JsonBufferSerializer.Serialize(this, value, jsonSerializerOptions); }
/// <summary> /// utf8的JsonPatch内容 /// </summary> /// <param name="oprations">patch操作项</param> /// <param name="jsonSerializerOptions">json序列化选项</param> public JsonPatchContent(IEnumerable <object> oprations, JsonSerializerOptions?jsonSerializerOptions) : base(MediaType) { JsonBufferSerializer.Serialize(this, oprations, jsonSerializerOptions); }