![](/img/trans.png)
[英]How to POST object using AJAX and get with ASP.NET Core MVC controller?
[英]Object deserialization fails POST in Asp Net Core MVC Controller
我创建了一个没有完整 MVC 模板的 API 应用程序。 但是,带有正文的 POST 请求总是因内部服务器错误而失败。
对于有状态服务,我在这里遵循了完全相同的步骤:
我在 Visual Studio 中使用 Stateful Service 模板创建了一个项目。 我添加了一个 Kestrel 监听器,如下所述:
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
return new ServiceReplicaListener[]
{
new ServiceReplicaListener(serviceContext =>
new KestrelCommunicationListener(serviceContext, (url, listener) =>
new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services
.AddSingleton<StatefulServiceContext>(serviceContext)
.AddSingleton<IReliableStateManager>(this.StateManager))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
.UseStartup<Startup>()
.UseUrls(url)
.Build()
))
};
}
然后,我添加了一个 Startup class 和一个测试 controller: internal class Startup { public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvcCore(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMvc(); } }
[Route("[controller]")]
[ApiController]
public class MyController : ControllerBase
{
[HttpGet("Read1")]
public async Task<ActionResult<string>> Read1()
{
return "asd";
}
[HttpPost("Read2")]
public async Task<ActionResult<string>> Read2()
{
return "asd";
}
[HttpPost("Read3")]
public async Task<ActionResult<MyOutput>> Read([FromBody]MyInput input)
{
var a = new MyOutput();
a.Value= "asdasd";
return a;
}
}
using System.Runtime.Serialization;
[DataContract]
public class MyInput
{
[DataMember]
public string Value{ get; }
public MyInput(string val)
{
Value= val;
}
}
当我向这 3 个端点发出请求时,/Read1 和 /Read2 请求工作正常。 但是,/Read3 请求失败,客户端出现内部服务器错误,我尝试在 controller 中设置断点,但对于 /Read3,它永远不会命中它。 这让我觉得反序列化不起作用。
我从 Insomnia 发送请求。 内容类型 header 设置为“application/json”和 JSON 主体的简单 POST 请求:
{
"Value": "cat"
}
这可能是什么原因造成的?
就我而言,我缺少 json 格式化程序:
services.AddMvcCore().AddJsonFormatters();
也许它可以帮助某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.