【问题标题】:FromBody is null next migrating to ASP .Net Core MVC 3.1FromBody 为空,下一次迁移到 ASP .Net Core MVC 3.1
【发布时间】:2020-08-06 23:34:26
【问题描述】:

我正在开发一个 ASP .Net Core MVC 2.0 应用程序。

一切正常。

我已迁移到 3.1 框架。我现在对这段代码有疑问:

[HttpPost]
[AllowAnonymous]
public async Task<JsonResult> my_auth([FromBody] JObject data)
{
    String _login = (String) data["login"];
    String _mot_de_passe = (String) data["password"];
    ...
}

数据对象为空,我不知道为什么。

我已经检查了客户并且帖子正文已发送...

有什么想法吗?

谢谢

* 编辑 *

这里是 http 查询:

POST /my_auth HTTP/1.1
Host: localhost:5000
Connection: keep-alive
Content-Length: 39
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/xxxxxx Safari/537.36
Content-Type: application/json
Sec-Fetch-Site: none
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7

{"login":"test","password":"1234"}

【问题讨论】:

  • 可能是个愚蠢的问题,但你正在打你的actino吗?只是data 为空?您是否还可以在请求中显示您正在发送的数据
  • 查看我的编辑。我已经粘贴了完整的 http 请求
  • {"login":"test","password":"1234"} 您的请求负载吗?它看起来不像,显示发送请求的代码或显示实际有效负载(您可以编辑您的实际详细信息)。另外,如果您调试,您是否会采取行动?您提供的信息太少,无法提供帮助
  • 是的,它是 POST 有效负载数据。我已经用嗅探器捕获了这个请求。你还需要什么?

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

作为改进 ASP.NET Core 共享框架工作的一部分,Newtonsoft.Json 已从 ASP.NET Core 3.x 的 ASP.NET Core 共享框架中删除。

按照以下步骤操作:

  • 在 nuget 上安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包。

    Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
    
  • 更新Startup.ConfigureServices 以调用AddNewtonsoftJson

    services.AddControllersWithViews().AddNewtonsoftJson();
    

参考:

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#use-newtonsoftjson-in-an-aspnet-core-30-mvc-project

【讨论】:

    【解决方案2】:

    尝试像这样使用“JsonElement”而不是“JObject”:

    public async Task<JsonResult> my_auth([FromBody]JsonElement data)
    {
        var _login = data.GetProperty("login").GetString();
        var _mot_de_passe = data.GetProperty("password").GetString();
        //...
    }
    

    您应该使用 System.Text.Json 命名空间。

    【讨论】:

    • 我有这个错误:“System.InvalidOperationException: 无法创建类型为 'System.Text.Json.JsonElement' 的实例。模型绑定的复杂类型不能是抽象类型或值类型,并且必须具有无参数构造函数。或者,给“数据”参数一个非空的默认值。”
    • 如何向应用发送发布请求?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2020-08-22
    • 2021-03-26
    • 2020-07-26
    • 2021-05-03
    • 2021-08-31
    相关资源
    最近更新 更多