【发布时间】:2020-04-19 07:13:53
【问题描述】:
我在 2.2 版有一个功能齐全的程序 迁移到 3.0 版并替换时
public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc();
}
与services.AddControllers();
并替换app.UseMvc();
与:
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
其中一个控制器坏了。 (其他也有 Post Method 和 [FromBody] 的控制器工作正常) 破坏的控制器和方法是:
[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,现在当我调试并进入控制器上的方法时,我在进程变量中得到 null
注意: 当应用程序首先被破坏时,我使用了这个线程 Using 'UseMvc' to configure MVC is not supported while using Endpoint Routing
【问题讨论】:
-
一种可能的情况是:Multiple 在模型中被声明为字符串,但在 JSON 中您作为布尔值传递。声明布尔值或将 false 分配为字符串 "Multiple": "false",
-
这是您模型的可能字符串: [ { "Name": "Test", "ExeName": "Test", "Multiple": "false", "Path": "Test" , "VersionPath": "Test", "Args": ["false"] }, { "Name": "Test", "ExeName": "Test.exe", "Multiple": "false", "Path" : "Test", "VersionPath": "Test", "Args": ["false"] } ]
-
如果您的 json 出价在 .net 2 中工作,请尝试使用 newtonsoft,如此处所述docs.microsoft.com/en-us/aspnet/core/migration/…
-
是的,听起来像是 system.text.json 更改。
-
不是您问题的答案,但如果您的属性名称与 JSON 键相同,则无需使用
JsonProperty。
标签: c# asp.net-core asp.net-mvc-controller