WEB API OdataController POST调用返回406不可接受

时间:2019-08-08 05:26:13

标签: c# asp.net-web-api odata asp.net-web-api-routing asp.net-web-api-odata

当我向ODataController发送POST请求时,表中插入了记录,但是出现以下错误“远程服务器返回错误:(406)不可接受。” GET调用相同的控制器就可以了。

我要打的URL是http://localhost:24419/User和POST的JSON正文。 我要发布以下JSON(重命名的属性):

{  
   "User_ID":0,
   "User_Name":"email@domain.com",
   "First_Name":null,
   "Middle_Name":null,
   "Last_Name":null,
   "Telephone_Number":null,
   "Alternate_Email":null,
   "Record_Update_UTC_Datetime":"2019-08-06T19:42:59.5380526Z",
   "Record_Update_Application_User_Name":"username",
}

适用于以下型号

public class User
    {
        [Key]
        public int User_ID { get; set; }
        [Required]
        [StringLength(255)]
        public string User_Name { get; set; }
        [StringLength(32)]
        public string First_Name { get; set; }
        [StringLength(32)]
        public string Middle_Name { get; set; }
        [StringLength(64)]
        public string Last_Name { get; set; }
        [StringLength(64)]
        public string Telephone_Number { get; set; }
        [StringLength(255)]
        public string Alternate_Email { get; set; }
        [Required]
        public DateTime Record_Update_UTC_Datetime { get; set; }
        [Required]
        [StringLength(128)]
        public string Record_Update_Application_User_Name { get; set; }
    }

下面是控制器:

public class UserController : ODataController
{
        [HttpGet]
        [EnableQuery(MaxExpansionDepth = 10, PageSize = 50, MaxNodeCount = 50)]
        public async Task<IHttpActionResult> GetUser()
        {
            var results = await _userService.GetUsers();
            return results.MakeWebApiActionResult(this);
        }

        public async Task<IHttpActionResult> Post([FromBody] User user)
        {
            var results = await _userService.AddUser(user);
            return Ok(results);
        }
}

我期望200 OK响应,但实际输出是:

  

“ ExceptionMessage”:“远程服务器返回错误:(406)不可接受。”

2 个答案:

答案 0 :(得分:0)

根据asp.net-web-api docs 您需要使用public class UserController : ODataController { /*...*/ [HttpPost] public async Task<IHttpActionResult> Post([FromBody] User user) { var results = await _userService.AddUser(user); return Ok(results); } /*...*/ 属性。试试这个:

resetGrid

答案 1 :(得分:0)

406特定于WebApi控制器(准确地说,是REST调用的响应头,指示以所需方式格式化输出数据时出现问题),而不必对在WebApi控制器中进行的OData调用进行任何操作。

请用[Produces(“ application / json”)]装饰您的课程 并且在您要从API客户端调用的请求以及请求主体中,还请在请求中添加一个值为“ application / json”的“ Accept”标头。

这应该可以解决您的问题。另外,希望您不要在startup.cs文件中使用MVC服务的mvc配置服务wrt格式程序。