C# ASP.NET Web API:“;“讯息”:&引用;请求的资源不支持http方法';邮政';,付诸表决,删除。”;邮递员
我正在尝试创建一个简单的C# ASP.NET Web API:“;“讯息”:&引用;请求的资源不支持http方法';邮政';,付诸表决,删除。”;邮递员,c#,mysql,asp.net,asp.net-web-api,postman,C#,Mysql,Asp.net,Asp.net Web Api,Postman,我正在尝试创建一个简单的ASP.NETWebAPI,它可以获取、发布、放置和删除(pharmacyName、pharmacyAddress、pharmacyCategory)条目到MySQL数据库中。我的“GET”功能都成功执行,但当我在邮递员中测试POST、PUT或DELETE功能时,我收到以下错误: “消息”:“请求的资源不支持http方法 “职位” 我已经在论坛和网络上搜索了一个解决方案,但是我找不到与我的案例相关的答案。我是一名初学者,如果我忽略了一些东西或使用了不正确/令人困惑的术语或
ASP.NET
WebAPI
,它可以获取、发布、放置和删除(pharmacyName、pharmacyAddress、pharmacyCategory)
条目到MySQL
数据库中。我的“GET”
功能都成功执行,但当我在邮递员
中测试POST、PUT
或DELETE
功能时,我收到以下错误:
“消息”:“请求的资源不支持http方法
“职位”
我已经在论坛和网络上搜索了一个解决方案,但是我找不到与我的案例相关的答案。我是一名初学者,如果我忽略了一些东西或使用了不正确/令人困惑的术语或编码结构,请原谅我
我在Postman中使用的请求URL是“localhost:59353/api/values/
。下面是我的ValuesController.cs、RouteConfig.cs和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));
}
}
WebAPIConfig.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 }
);
}
}
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 framework中的查询字符串中获取,而复杂类型总是从body中获取 解决方案-1 在这种情况下.Net Framework需要查询参数中的字符串pharmacyAddress和pharmacyCategory,您可以这样调用API,而无需对服务器端代码进行任何更改 注意:您也不需要定义参数的键(在http请求中),该参数被定义为
[FromBody]
。因为可以使用[FromBody]
属性来传递一个简单的类型,您可以如下所示=pharmacyNameContent
POST /api/values?pharmacyAddress=myaddress&pharmacyCategory=mycategory HTTP/1.1
Host: localhost:59353
Content-Type: application/x-www-form-urlencoded
=pharmacyNameContent
解决方案2
或者,您可以通过将所有参数放在复杂模型中来调用API,并通过body传递参数,而不是像这样的查询参数
复杂类型模型
public class PharmacyModel
{
public string PharmacyName { get; set; }
public string PharmacyAddress { get; set; }
public string PharmacyCategory { get; set; }
}
API代码
[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
}
现在,您可以通过如下方式在主体中传递参数来使用API
POST /api/values? HTTP/1.1
Host: localhost:59353
Content-Type: application/x-www-form-urlencoded
pharmacyAddress=myaddress&pharmacyCategory=mycategory&pharmacyName=nameOfPharmacy
它肯定会工作,因为它已经在我这边实现和测试了请添加如何从邮递员发送请求?我正在将下拉列表更改为“POST”,并使用请求URL“localhost:59353/api/values/”