控制器在POST上接收默认值

问题描述 投票:0回答:1

我正试图使用.NET Core 3.1在OS X中使用Visual Studio for Mac制作一个非常简单的Web服务。

我开始了一个Web应用程序模板项目,之后包括一个简单的控制器。

为了启用控制器,我在 Startup.cs 以下的线路。

     app.UseEndpoints(endpoints =>
             {
                 endpoints.MapRazorPages();
                 endpoints.MapControllers(); //This
             });

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddControllers(); //and this

        }

所以我的控制器是这样的。

    [Route("api/[controller]")]
    public class ValuesController : Controller
    {

        [HttpPost("test")]
        public void Read(TestEntityModel tem)
        {
            Console.WriteLine(tem.txt);
        }

我在调试到达Read()方法的内容,但是... ... tem 对象看起来一直是空的。

TestEntityModel 类看起来像这样。

    public class TestEntityModel
    {
        public string txt { get; set; }
        public float number { get; set; }
    }

我用下面的AJAX代码来调用这个方法 I'm calling this method with the following AJAX code:

    function send() {
        var TestEntityModel = new Object();
        TestEntityModel.txt = "hola";
        TestEntityModel.number = 7;
        $.ajax({
            url: '/api/values/test',
            type: 'POST',
            contentType: "application/json",
            dataType: 'json',
            data: TestEntityModel,
            success: function (data, textStatus, xhr) {
                console.log(data);
            },
            error: function (xhr, textStatus, errorThrown) {
                console.log('Error in Operation');
            }
        });


    }

但不知道是怎么回事

有谁遇到同样的问题?

jquery asp.net asp.net-core post controller
1个回答
1
投票

从APICONTROLLER继承和添加[FromBody]属性应该做到这一点。如果没有的话,用fiddler检查你的请求是如何发送数据的。我也会确认你的net core应用是否有默认的媒体类型格式为json,我想是的,但是要确认一下。

public ActionResult<Pet> Create([FromBody] Pet pet)

也可以看看这个文档 https:/docs.microsoft.comen-usaspnetcoremvcmodelsmodel-binding?view=aspnetcore-3.1。

© www.soinside.com 2019 - 2024. All rights reserved.