带有ASP.NET Core 3.1的JsonHttpContent

飞行

我创建了一个自定义HttpContent,以将System.Text.Json与HttpClient一起有效地发送对象。遗憾的是,关于如何正确执行此操作的文档很少。以下类在我的测试端点处导致有关格式错误的JSON数据的错误。查看wireshark中的数据包显示,仅{}传输了一个空的json对象()。我还尝试刷新流(相同的结果)或在写入流后对其进行处置(这会导致有关通过tring访问已处置对象的错误)。

using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace Common
{
    public sealed class JsonContent : HttpContent
    {
        private readonly object _content;
        private readonly JsonSerializerOptions _options;

        public JsonContent(object content, JsonSerializerOptions options)
        {
            _content = content;
            _options = options;
            Headers.ContentType = new MediaTypeHeaderValue("application/json")
            {
                CharSet = Encoding.UTF8.WebName
            };
        }

        protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
        {
            return JsonSerializer.SerializeAsync(stream, _content, _options);
        }

        protected override bool TryComputeLength(out long length)
        {
            length = 0;
            return false;
        }
    }
}

整个事情是这样使用的:

public static async Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient client, string url, T content,
    CancellationToken ct = default) where T : class
{
    return await client.PostAsync(url, new JsonContent(content, Json.DefaultSerializerOptions), ct);
}

我在这里想念什么?

威奇

看来您错过了的类型_content尝试这个:

protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
    return JsonSerializer.SerializeAsync(stream, _content, _content.GetType(), _options);
}

您调用的方法实际上是SerializeAsync<TValue>(...),它typeof(TValue)用作序列化的类型。因为您_content是的实例object,所以TValue在这种情况下是object,因此_content被序列化为object这就是为什么您只能看到{}

该修复程序调用另一个重载SerializeAsync(...),该重载允许您指定要序列化的正确类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将'hd'参数附加到带有身份标识3的redirectUrl ASP.NET Core 1

来自分类Dev

带有JSON参数的HttpPost在ASP.NET Core 3中不起作用

来自分类Dev

asp net core 3发布后,对带有正文内容的POST操作获取BadRequest响应

来自分类Dev

带有EntityFramework.Core的ASP.NET vNext

来自分类Dev

路由中带有ID的ASP.NET Core表单

来自分类Dev

带有JSONP的ASP.NET Core MVC

来自分类Dev

带有ASP.NET Core 3.0的JsonSerializer Struct

来自分类Dev

带有JSONP的ASP.NET Core MVC

来自分类Dev

使用带有端点路由的ASP.NET Core中的CreatedAtRouteResult生成带有段的URL

来自分类Dev

获取ASP.NET Core 1中的所有缓存

来自分类Dev

.NET Standard和.NET Core 3.x或ASP.NET Core 3.x

来自分类Dev

Asp Net core 3的配置是否与Asp Net core 3无关?

来自分类Dev

共享cookie .net Core 3和Asp.net

来自分类Dev

带有ASP.NET Core 3.0和EF Core的多租户应用程序

来自分类Dev

带有EF Core和CosmosDB的ASP.Net Core-IdentityRole问题

来自分类Dev

将带有ASP.NET Core 2.2的Autofac Multitenant升级到ASP.NET Core 5

来自分类Dev

带有Firebird数据库和字符集的.Net Core 3实体框架无

来自分类Dev

如何使用ASP.NET Core 1.0上传带有模型的文件?

来自分类Dev

使用带有ASP.NET Core标识的PostgreSQL使用TypeLoadException

来自分类Dev

带有ASP.NET Core的SignalR不使用网络套接字,但需要长时间轮询

来自分类Dev

如何在带有身份的ASP.NET Core项目中禁用HTTPS?

来自分类Dev

带有asp.net Core 3.1后端的Angular SPA中的OpenID Connect

来自分类Dev

InvalidOperationException:序列不包含任何元素。在带有实体框架的Asp.net Core MVC中

来自分类Dev

带有实体框架的ASP.NET Core MVC中的索引方法不接受参数

来自分类Dev

使用HTTPClient的带有ViewModel的ASP.NET Core Post表单数据IFormFile

来自分类Dev

如何使用带有自定义参数的ASP.NET Core实现dhtmlxScheduler?

来自分类Dev

如何在带有maxAllowedContentLength的IIS上的ASP.NET Core中使用MaxRequestBodySize?

来自分类Dev

带有动态参数的LINQ查询并执行Count操作ASP.NET Core 3.1

来自分类Dev

带有单独数据.dll的ASP.NET Core UI App

Related 相关文章

  1. 1

    将'hd'参数附加到带有身份标识3的redirectUrl ASP.NET Core 1

  2. 2

    带有JSON参数的HttpPost在ASP.NET Core 3中不起作用

  3. 3

    asp net core 3发布后,对带有正文内容的POST操作获取BadRequest响应

  4. 4

    带有EntityFramework.Core的ASP.NET vNext

  5. 5

    路由中带有ID的ASP.NET Core表单

  6. 6

    带有JSONP的ASP.NET Core MVC

  7. 7

    带有ASP.NET Core 3.0的JsonSerializer Struct

  8. 8

    带有JSONP的ASP.NET Core MVC

  9. 9

    使用带有端点路由的ASP.NET Core中的CreatedAtRouteResult生成带有段的URL

  10. 10

    获取ASP.NET Core 1中的所有缓存

  11. 11

    .NET Standard和.NET Core 3.x或ASP.NET Core 3.x

  12. 12

    Asp Net core 3的配置是否与Asp Net core 3无关?

  13. 13

    共享cookie .net Core 3和Asp.net

  14. 14

    带有ASP.NET Core 3.0和EF Core的多租户应用程序

  15. 15

    带有EF Core和CosmosDB的ASP.Net Core-IdentityRole问题

  16. 16

    将带有ASP.NET Core 2.2的Autofac Multitenant升级到ASP.NET Core 5

  17. 17

    带有Firebird数据库和字符集的.Net Core 3实体框架无

  18. 18

    如何使用ASP.NET Core 1.0上传带有模型的文件?

  19. 19

    使用带有ASP.NET Core标识的PostgreSQL使用TypeLoadException

  20. 20

    带有ASP.NET Core的SignalR不使用网络套接字,但需要长时间轮询

  21. 21

    如何在带有身份的ASP.NET Core项目中禁用HTTPS?

  22. 22

    带有asp.net Core 3.1后端的Angular SPA中的OpenID Connect

  23. 23

    InvalidOperationException:序列不包含任何元素。在带有实体框架的Asp.net Core MVC中

  24. 24

    带有实体框架的ASP.NET Core MVC中的索引方法不接受参数

  25. 25

    使用HTTPClient的带有ViewModel的ASP.NET Core Post表单数据IFormFile

  26. 26

    如何使用带有自定义参数的ASP.NET Core实现dhtmlxScheduler?

  27. 27

    如何在带有maxAllowedContentLength的IIS上的ASP.NET Core中使用MaxRequestBodySize?

  28. 28

    带有动态参数的LINQ查询并执行Count操作ASP.NET Core 3.1

  29. 29

    带有单独数据.dll的ASP.NET Core UI App

热门标签

归档