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

C# WEB API OdataController POST调用返回406不可接受,c#,asp.net-web-api,odata,asp.net-web-api-routing,asp.net-web-api-odata,C#,Asp.net Web Api,Odata,Asp.net Web Api Routing,Asp.net Web Api Odata,当我向ODataController发送POST请求时,记录被插入到表中,但我得到以下错误“远程服务器返回错误:(406)不可接受”。相同控制器的get调用工作正常 我试图点击的URL是POST的JSON正文。 我发布了以下JSON(重命名属性): 对于以下模型 public class User { [Key] public int User_ID { get; set; } [Required] [StringLengt

当我向ODataController发送POST请求时,记录被插入到表中,但我得到以下错误“远程服务器返回错误:(406)不可接受”。相同控制器的get调用工作正常

我试图点击的URL是POST的JSON正文。 我发布了以下JSON(重命名属性):

对于以下模型

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);
        }
}
公共类用户控制器:ODataController
{
[HttpGet]
[启用查询(MaxExpansionDepth=10,PageSize=50,MaxNodeCount=50)]
公共异步任务GetUser()
{
var results=await_userService.GetUsers();
返回结果。makeWebApiationResult(此);
}
公共异步任务发布([FromBody]用户)
{
var results=await\u userService.AddUser(用户);
返回Ok(结果);
}
}
我期望200 OK响应,但实际输出为:

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

据 您需要使用
[HttpPost]
属性。试试这个:

公共类用户控制器:ODataController
{
/*...*/
[HttpPost]
公共异步任务发布([FromBody]用户)
{
var results=await\u userService.AddUser(用户);
返回Ok(结果);
}
/*...*/
根据 您需要使用
[HttpPost]
属性。请尝试以下操作:

公共类用户控制器:ODataController
{
/*...*/
[HttpPost]
公共异步任务发布([FromBody]用户)
{
var results=await\u userService.AddUser(用户);
返回Ok(结果);
}
/*...*/

406特定于WebApi控制器(确切地说,是REST调用的响应头,用于指示以所需方式格式化输出数据时出现的问题),不一定与WebApi控制器中的OData调用有任何关系

请用[products(“application/json”)装饰您的类 在您从API客户机调用的请求中,以及requst正文中,还请在请求中添加一个值为“application/json”的“Accept”头


这应该可以解决您的问题。另外,我希望您不要在startup.cs文件中使用mvc配置服务wrt格式化程序。406是WebApi控制器特有的(确切地说,是REST调用的响应头,用于指示以所需方式格式化输出数据的问题)并且不必对WebApi控制器中的OData调用执行任何操作

请用[products(“application/json”)装饰您的类 在您从API客户机调用的请求中,以及requst正文中,还请在请求中添加一个值为“application/json”的“Accept”头


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

检查reequest头的定义,如果是ACCETPABLEC,是否可以添加您试图发布的JSON内容?@JohnB更新了我的question@JohnB请求头看起来不错。{Content Type:application/json;charset=utf-8 Host:localhost:24419 Content-Length:1123 Expect:100 continue-Connection:Keep-Alive}可能它只接受
text
(而不是
json
)检查reequest头的定义,如果它是ACCETPABLEC,您可以添加您试图发布的JSON内容吗?@JohnB-updated myquestion@JohnB请求头看起来很好。{Content-Type:application/json;charset=utf-8 Host:localhost:24419 Content-Length:1123 Expect:100 continue-Connection:Keep-Alive}可能它只接受
text
(而不是
json
ProducesAttribute
是MVC,OP已经将其标记为OData,来自@lobi的添加
httpposattribute
的响应对于这个常见问题是正确的。明白了。HttpPost应该足够了,我假设application/json是可用的默认格式化程序
ProducesAttribute
是MVC,OP已经将其标记为OData,响应从@lobi添加
HttpPostAttribute
对于这个常见问题是正确的。明白了。HttpPost应该足够了,因为application/json是可用的默认格式化程序
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);
        }
}