【问题标题】:ASP.NET Web API post method parameter is always nullASP.NET Web API post 方法参数始终为空
【发布时间】:2016-11-07 10:38:31
【问题描述】:

这是我的模型课:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Test.Models
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        //public DateTime startTime { get; set; }
        //public DateTime endTime { get; set; }
        //public int Age { get; set; }
        //public string Adress { get; set; }
    }
}

这是我的控制器类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Test.DBA;
using Test.Models;

namespace Test.Controllers
{
    public class UserAPIController : ApiController
    {
        ApiDbContext dbContext = null;
        public UserAPIController()
        {
            dbContext = new ApiDbContext();
        }
        [HttpPost]
        public IHttpActionResult InsertUser(User user)
        {
            dbContext.Users.Add(user);
            dbContext.SaveChangesAsync();

            return Ok(user.Name);
        }

        public IEnumerable<User> GetAllUser()
        {
            var list = dbContext.Users.ToList();
            return list;
        }

        [HttpPost]
        public IHttpActionResult DeleteUser(User user)
        {
            dbContext.Users.Remove(user);
            dbContext.SaveChanges();

            return Ok(user.Name);
        }

        [HttpGet]
        public IHttpActionResult ViewUser(int id)
        {
            var student = dbContext.Users.Find(id);
            return Ok(student);
        }

        [HttpPost]
        public IHttpActionResult UpdateUser(User user)
        {
            User std = dbContext.Users.Find(user.Id);

            std.Name = user.Name;
            //std.startTime = user.startTime;
            //std.endTime = user.endTime;
            //std.Age = user.Age;
            //std.Adress = user.Adress;

            dbContext.Entry(std).State = System.Data.Entity.EntityState.Modified;
            dbContext.SaveChangesAsync();

            return Ok();
        }
    }
}

我正在尝试使用 google chrome 应用 Postman 调用 post 方法。我用原始 JSON 正文调用它:

{
    Id : 1,
    Name : "Sample"
}

get 方法有效,但是当我调试 post 方法时,参数始终为 null。

编辑 1:路由:

config.Routes.MapHttpRoute(
              name: "DefaultApi",
              routeTemplate: "api/{controller}/{action}/{id}",
              defaults: new { id = RouteParameter.Optional }
          );

【问题讨论】:

  • 你使用什么类型的路由?
  • 我编辑了原帖。
  • Accept 和 Content-Type 标头使用什么?
  • @foobar 对不起,我是新手,我不确定你在问什么,但如果你问的是 post 请求,我不使用任何标题,我也不知道什么是接受
  • @Saizaku,是的,这些是请求标头。我认为邮递员会在幕后为您处理这些标题。然而,这有时会导致问题。

标签: c# asp.net web http-post asp.net-web-api2


【解决方案1】:

尝试将以下请求标头添加到邮递员:

Content-Type: application/json

【讨论】:

  • 不要忘记在“正文”选项卡中选择“原始”单选按钮。
  • 谢谢它的工作,我试图让它工作几天,非常感谢!
  • @toadfladkx 我已经选择了那个单选按钮,只是缺少标题
【解决方案2】:

尝试用[FromBody]装饰你的参数:

public IHttpActionResult DeleteUser([FromBody]User user)

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多