Web API帖子返回415 - 不支持的媒体类型

时间:2016-07-22 15:40:38

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

如何使用C#在SQL Server数据库上执行CRUD操作?

例如,假设有一个包含以下列的数据库表Employees

EmployeeID, FirstName, PostalCode

我希望将新员工的信息发布到该数据库。什么是有效的方法来实现这一目标?

我当前的HttpPost

namespace API.Controllers
{
    public class EmployeesController : ApiController
    {
        [HttpPost]
        public void AddEmployee (Employee employee)
        {
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString = @"Server=.\servername;Database=Northwind;User ID=Username;Password=password;";

            SqlCommand sqlCmd = new SqlCommand();
            sqlCmd.CommandType = CommandType.Text;
            sqlCmd.CommandText = "INSERT INTO Employee (EmployeeID,FirstName,PostalCode) Values (@EmployeeID, @FirstName, @Zip)";

            sqlCmd.Parameters.AddWithValue("@EmployeeID", employee.EmployeeID);
            sqlCmd.Parameters.AddWithValue("@FirstName", employee.FirstName);
            sqlCmd.Parameters.AddWithValue("@Zip", employee.Zip);

            myConnection.Open();
            int rowInserted = sqlCmd.ExecuteNonQuery();
            myConnection.Close();
        }
    }
}

这是Employee模型:

namespace API.Models
{
    public class Employee
    {
        public int EmployeeID { get; set; }
        public string FirstName { get; set; }
        public int Zip { get; set; }
    }
}

当我使用Fiddler使用以下输入测试我的API时:

{ "EmployeeID":91, "FirstName":"Vader", "Zip":94221}

我收到此错误:

  

HTTP / 1.1 415不支持的媒体类型

并且没有任何内容插入到数据库中。

非常感谢任何指导。

WebApiConfig.cs

namespace API
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

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

根据请求生成原始错误消息:

  

HTTP / 1.1 415不支持的媒体类型

     

缓存控制:无缓存

     

Pragma:no-cache

     

Content-Type:application / json;字符集= UTF-8

     

过期:-1

     

服务器:Microsoft-IIS / 10.0

     

X-AspNet-Version:4.0.30319

     

X-SourceFiles:=?UTF-8?B?YzpcdXNlcnNcYW1lc2tvXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTVcUHJvamVjdHNcQVBJXEFQSVxhcGlcRW1wbG95ZWVzXEFkZEVtcGxveWVl?=

     

X-Powered-By:ASP.NET

     

日期:2016年7月22日星期五15:33:06 GMT

     

内容长度:986

     

{“Message”:“请求包含实体主体但没有Content-Type标头。此资源不支持推断的媒体类型'application / octet-stream'。”,

     

“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为'application / octet-stream'的内容中读取'Employee'类型的对象。”,

     

“ExceptionType”: “System.Net.Http.UnsupportedMediaTypeException”,

     

“StackTrace”:“在System.Net.Http.HttpContentExtensions.ReadAsAsync [T](HttpContent内容,类型类型,IEnumerable1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)\ n \ r \ n在System.Net.Http.HttpContentExtensions。在System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage请求,类型类型,IEnumerable`1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)中的ReadAsAsync(HttpContent内容,类型类型,IEnumerable1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellationToken)\ r \ n )“}

1 个答案:

答案 0 :(得分:0)

您如何传递JSON输入?它必须通过请求类型为application / json

的请求正文

您可以将您的路线指定为

“ api / {controller} / {action} / {id}”

,然后在调用API网址时将是

http://localhost:63433/api/Employees/AddEmployee

notice Controller不是URL的一部分

在请求正文中

{“ EmployeeID”:91,“ FirstName”:“ Vader”,“ Zip”:94221}

将请求类型设为Post 并请求正文为application / json

您可以通过邮递员查看屏幕之类的客户端工具测试api

PostMan

如果可以发布您的客户代码,我可以检查一下。