簡體   English   中英

Web API Post 返回 415 - 不支持的媒體類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM