![](/img/trans.png)
[英]ASP.NET Web Api “The requested resource does not support http method PUT/DELETE”
[英]ASP.NET Web API: "Message": "The requested resource does not support http method 'POST', PUT, DELETE." in Postman
我正在嘗試創建一個簡單的ASP.NET
Web API
,它將條目(pharmacyName, pharmacyAddress, pharmacyCategory)
獲取、發布、放置和刪除到MySQL
數據庫中。 我的兩個"GET"
函數都成功執行,但是當我在Postman
測試POST, PUT
或DELETE
功能時,我收到以下錯誤:
"Message": "請求的資源不支持 http 方法 'POST'。"
我已經在論壇和網絡上搜索了解決方案,但我一直無法找到與我的案例相關的答案。 我是初學者,所以如果我忽略了某些東西或使用了不正確/令人困惑的術語或編碼結構,請原諒我。
我在 Postman 中使用的請求 URL 是"localhost:59353/api/values/
。下面是我的ValuesController.cs, RouteConfig.cs, and WebAPIConfig.cs
文件中的代碼塊:
ValuesController.cs POST 方法:
// POST api/values
[System.Web.Http.HttpPost]
public void Post([FromBody]string pharmacyName, string pharmacyAddress, string pharmacyCategory)
{
MySqlConnection conn = WebApiConfig.conn();
MySqlCommand query = conn.CreateCommand();
query.CommandText = "INSERT INTO locations (pharmacyName, pharmacyAddress, pharmacyCategory) VALUES (@pharmacyName, @pharmacyAddress, @pharmacyCategory)";
query.Parameters.AddWithValue("@pharmacyName", pharmacyName);
query.Parameters.AddWithValue("@pharmacyAddress", pharmacyAddress);
query.Parameters.AddWithValue("@pharmacyCategory", pharmacyCategory);
var results = new List<results>();
try
{
conn.Open();
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
results.Add(new results(null, null, null, ex.ToString()));
}
MySqlDataReader fetch_query = query.ExecuteReader();
while (fetch_query.Read())
{
results.Add(new results(fetch_query["pharmacyName"].ToString(), fetch_query["pharmacyAddress"].ToString(), fetch_query["pharmacyCategory"].ToString(), null));
}
}
RouteConfig.cs:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
WebAPIConfig.cs:
public static class WebApiConfig
{
public static MySqlConnection conn()
{
string conn_string = "server=localhost;port=3306;database=map;username=root;password=123456";
MySqlConnection conn = new MySqlConnection(conn_string);
return conn;
}
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 }
);
}
}
像string、int、float等簡單類型將從 .Net 框架中的查詢字符串中獲取,而復雜類型總是從 body 中獲取。
在這種情況下,.Net Framework 需要來自查詢參數的字符串pharmacyAddress和pharmacyCategory ,您可以像這樣調用 API,而無需對服務器端代碼進行任何更改。
注意:您也不需要定義被定義為[From Body]
的參數的鍵(在 http 請求中)。 因為總共可以使用[FromBody]
屬性傳遞一種簡單類型,您可以在下面看到這樣的=pharmacyNameContent
POST /api/values?pharmacyAddress=myaddress&pharmacyCategory=mycategory HTTP/1.1
Host: localhost:59353
Content-Type: application/x-www-form-urlencoded
=pharmacyNameContent
或者您可以通過將所有參數放在復雜模型中來調用您的 API,並通過主體而不是像這樣的查詢參數傳遞參數
復雜類型模型
public class PharmacyModel
{
public string PharmacyName { get; set; }
public string PharmacyAddress { get; set; }
public string PharmacyCategory { get; set; }
}
接口代碼
[System.Web.Http.HttpPost]
public void Post(PharmacyModel pharamcyModel)
{
MySqlConnection conn = WebApiConfig.conn();
MySqlCommand query = conn.CreateCommand();
//Access your propeties like this
query.CommandText = "INSERT INTO locations (pharamcyModel.PharmacyName, pharamcyModel.PharmacyAddress, pharamcyModel.PharmacyCategory) VALUES (@pharmacyName, @pharmacyAddress, @pharmacyCategory)";
//rest of the coding
}
現在你可以像這樣通過 body 傳遞參數來使用你的 API
POST /api/values? HTTP/1.1
Host: localhost:59353
Content-Type: application/x-www-form-urlencoded
pharmacyAddress=myaddress&pharmacyCategory=mycategory&pharmacyName=nameOfPharmacy
它肯定會工作,因為它已經從我的角度實施和測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.