我在2.2版中拥有一个功能齐全的程序
迁移到3.0版并替换 使用 并替换 使用: 其中一个控制器损坏。 (其他具有Post Method和[FromBody]的控制器也可以正常工作)
控制器和坏掉的方法是: 模型: 我打给 该应用在生产中正常工作了几个月。我所做的就是升级到.netcore 3,现在,当我调试并进入控制器的方法时,过程变量为空 注意:
当应用程序最初损坏时,我使用了此线程
Using 'UseMvc' to configure MVC is not supported while using Endpoint Routing 答案 0 :(得分:1) 自动类型转换在新的 使用Newtonsoft:
https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#jsonnet-support 像这样注册您的转换器: 答案 1 :(得分:1) 原因是您的 在json中,您将其作为对象传递,导致模型绑定为空 像 或者,如果您确实想更改json,请将 请记住要像其他人所说的那样添加对 答案 2 :(得分:0) public void ConfigureServices(IServiceCollection services)
{
...
services.AddMvc();
}
services.AddControllers();
app.UseMvc();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
[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
}
}
]
3 个答案:
System.Text.Json
中不可用,可能是出于性能原因。您应该使用“ Newtonsoft serializer”或使用自定义转换器。您的某些类属性是字符串,但您正在发送int的bool(Multiple属性)。System.Text.Json
转换器示例:services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new MyInt32Converter());
});
ProcessModel
的{{1}}类型为string[]
:Args
public string[] Args { get; set; }
"Args": {
"IsFile": false
}
一样通过Args
string[]
"Args": ["IsFile:false"]
修改为Dictionary类型:Args
[JsonProperty("Args")]
public Dictionary<string, string> Args { get; set; }
的引用NewtonsoftJson
Multiple
和Args
JSON属性中的问题。
在JSON中,它们既是布尔对象又在对象中,但是在Process
模型中,它们都是字符串。我不太确定它在Core 2.2中如何工作。