示例#1
0
        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));
        }
示例#2
0
        /// <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;
            }
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
 /// <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);
 }
示例#6
0
 /// <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);
 }