ASP.只有一个POST方法的Web API不会被调用
本文关键字:API 调用 Web 有一个 POST 方法 ASP | 更新日期: 2023-09-27 18:16:33
我正在做一个Web API,它可以对数据库执行任意SQL(通过Ajax从用户端传递,因此当然只有SELECT),并以JSON格式返回查询结果。
假设我将这个控制器命名为myQueryController,并将其定义为:
public class myQueryController : ApiController
{
[HttpPost]
public string Query(string sql)
{
string blll = sql;
return blll;
}
}
我有我的WebApiConfig.cs像:
// other routes
// the new route I added, well, in that my predecessor didn't follow the RESTful convention
config.Routes.MapHttpRoute(
name: "myQuery",
routeTemplate: "api/myquery/{action}/{id}",
defaults: new
{
id = RouteParameter.Optional,
action = "Query",
controller = "myQuery",
}
);
// default rout
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {
controller = "URI",
id = RouteParameter.Optional ,
}
);
我在Firefox中通过Ajax发布到myQuery:
$.ajax(
{
type: "POST",
url: "/api/myquery/query/",
contentType: "application/json;charset=utf-8",
success: function (results) {
console.log(results);
}
}
);
但是我得到404错误:
"NetworkError: 404 Not Found - http://localhost:5758/api/myquery/query/"
当我在提琴手组成POST请求时,我得到了相同的404错误。
如果我在WebApiConfig.cs中删除了新的路由定义,我仍然得到相同的错误。
任何帮助都是非常感激的,提前感谢。
如果POST方法需要一个基本类型值,比如在我的例子中是字符串类型,那么你必须在参数之前加上'[FromBody]':
[HttpPost]
public string Query([FromBody]string sql)
{
string myLocal = sql;
return myLocal;
}
要将字符串传递给查询方法,Ajax应该是这样的:
$.ajax({
url : "/api/myquery/query",
data : "=select * from table",
dataType : "text",
type : "POST",
success : function(res){ console.log(res); },
error : function(req, stat, err){ console.log(stat + ": " + err); }
});
我从这篇文章中找到了解决方案:ASP。. NET WebAPI抛出404如果方法参数是字符串或int,但我发现字符串'hello world'周围的单引号是不必要的,你可以在第三个答案中找到。
data: "='hello world'",