[英]Web API Post returns 415 - Unsupported Media Type
應該如何使用 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:無緩存
內容類型:應用程序/json; 字符集=utf-8
過期:-1
服務器:Microsoft-IIS/10.0
X-AspNet-版本:4.0.30319
X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcYW1lc2tvXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTVcUHJvamVjdHNcQVBJXEFQSVxhcGlcRW1wbG95ZWVzXEFkZEVtcGxveWVl?=
X-Powered-By: ASP.NET
日期:格林威治標准時間 2016 年 7 月 22 日星期五 15:33:06
內容長度: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 cancelToken)\r\n 在 System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent內容,類型類型,IEnumerable1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)\r\n 在 System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage 請求,類型類型,IEnumerable`1 格式化程序,IFormatterLogger formatterLogger,CancellationToken cancelToken)"}
你如何傳遞 JSON 輸入? 它需要通過請求類型為 application/json 的請求正文
您可以將路線指定為
“api/{controller}/{action}/{id}”
然后當調用 API url 時
http://localhost:63433/api/Employees/AddEmployee
注意控制器不是 URL 的一部分
在請求正文中放置
{ "EmployeeID":91, "FirstName":"Vader", "Zip":94221}
將請求類型設為 Post 並將請求正文設為 application/json
您可以從郵遞員之類的客戶端工具測試您的 api 查看屏幕
如果您可以發布您的客戶代碼,我可以檢查它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.