Wak*_*cca 5 c# asp.net-web-api
如何使用C#对SQL Server数据库执行CRUD操作?
例如,假设有一个Employees包含这些列的数据库表:
EmployeeID, FirstName, PostalCode
Run Code Online (Sandbox Code Playgroud)
我希望将新员工的信息发布到该数据库。什么是实现此目的的有效方法?
我目前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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是Employee模型:
namespace API.Models
{
public class Employee
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public int Zip { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用Fiddler使用以下输入测试我的API时:
{ "EmployeeID":91, "FirstName":"Vader", "Zip":94221}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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 }
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据请求生成原始错误消息:
HTTP / 1.1 415不支持的媒体类型
缓存控制:无缓存
语法:无缓存
内容类型:application / json; 字符集= utf-8
过期:-1
服务器:Microsoft-IIS / 10.0
X-AspNet版本:4.0.30319
X源文件:=?UTF-8?B?
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”,
System.Net.Http.HttpContentExtensions.ReadAsAsync [T]上的“ StackTrace”:“(HttpContent内容,类型,IEnumerable1格式器,IFormatterLogger格式器Logger,CancellationToken取消令牌)\ r \ n在System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent内容,类型类型,IEnumerable1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancellingToken)\ r \ n位于System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage请求,类型类型,IEnumerable`1格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelledToken)“}
小智 1
你如何传递 JSON 输入?它需要通过请求类型为 application/json 的请求正文
您可以将路线指定为
“api/{控制器}/{操作}/{id}”
然后当调用 API url 时
http://localhost:63433/api/Employees/AddEmployee
注意控制器不是 URL 的一部分
在请求正文中放入
{ "EmployeeID":91, "FirstName":"Vader", "Zip":94221}
将请求类型设置为 Post 并将请求正文设置为 application/json
您可以通过客户端工具(例如 postman see screen)测试您的 api
如果您可以发布您的客户代码,我可以检查它。