gpt4 book ai didi

c# - 从 .net core 2.2 迁移到 3.0 时 Controller 发布 [FromBody] Null 问题

转载 作者:行者123 更新时间:2023-12-01 22:39:31 26 4
gpt4 key购买 nike

我有一个功能齐全的 2.2 版程序迁移到 3.0 版本并替换时

public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc();
}

使用services.AddControllers();

并替换app.UseMvc();

与:

app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});

其中一个 Controller 坏了。 (其他也有 Post 方法和 [FromBody] 的 Controller 也可以正常工作) Controller 和损坏的方法是:

[Route("api/vm")]
public class MainController: Controller
{
[HttpPost]
[Route("Process")]
public IActionResult GetProcess([FromBody]ProcessModel[] process)
{
...
}
}

模型:

public class ProcessModel
{
[JsonProperty("Name")]
public string Name { get; set; }
[JsonProperty("ExeName")]
public string ExeName { get; set; }
[JsonProperty("Path")]
public string Path { get; set; }
[JsonProperty("VersionPath")]
public string VersionPath { get; set; }
[JsonProperty("Id")]
public string Id { get; set; }
[JsonProperty("Status")]
public string Status { get; set; }
[JsonProperty("Ver")]
public string Ver { get; set; }
[JsonProperty("Args")]
public string[] Args { get; set; }
[JsonProperty("Instances")]
public List<ProcessDetails> Instances { get; set; }
[JsonProperty("Multiple")]
public string Multiple { get; set; }
}

我对 /api/vm/Process 进行的调用:

[
{
"Name": "Test",
"ExeName": "Test",
"Multiple": false,
"Path": "Test",
"VersionPath": "Test",
"Args": {
"IsFile": false
}
},
{
"Name": "Test",
"ExeName": "Test.exe",
"Multiple": false,
"Path": "Test",
"VersionPath": "Test",
"Args": {
"IsFile": false
}
}
]

该应用程序在生产环境中运行了几个月,运行良好。我所做的就是升级到 .netcore 3,现在当我调试并访问 Controller 上的方法时,我在进程变量中得到 null

注意:当应用程序首先损坏时我使用了这个线程 Using 'UseMvc' to configure MVC is not supported while using Endpoint Routing

最佳答案

自动类型转换在新的 System.Text.Json 中不可用,可能是出于性能原因。您应该使用“Newtonsoft 序列化器”或使用自定义转换器。您的一些类属性是字符串,但您正在发送 bool(多个属性)、int。

使用牛顿软件: https://learn.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#jsonnet-support

System.Text.Json 转换器示例:

https://github.com/dotnet/corefx/blob/master/src/System.Text.Json/tests/Serialization/CustomConverterTests.Int32.cs

像这样注册你的转换器:

services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new MyInt32Converter());
});

关于c# - 从 .net core 2.2 迁移到 3.0 时 Controller 发布 [FromBody] Null 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59532554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com