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中删除了新的路由定义,我仍然得到相同的错误。

任何帮助都是非常感激的,提前感谢。

ASP.只有一个POST方法的Web API不会被调用

如果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'",