我正在尝试创建一个基于asp.netmvc4webapi框架的rest api。GET
请求工作正常。服务器将忽略所有其他动词。
它只是说:
"No action was found on the controller 'Track' that matches the request."
虽然示例错误来自轨迹控制器,但所有其他控制器都有相同的问题。
这是我试图调用的控制器轨迹上的方法:
[HttpPost]
public Object Index(string token, string juke, string track)
{
}
我试过用一个像这样的对象:
{ "track": "0000", "juke": "0000" }
我试着用“正常”的方式:
track=0000&juke=0000
上面例子中的“0000”是真实ID的替身。
为了确保我也发布了
JSON
中的Register()
:public static void Register(HttpConfiguration config)
{
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Routes.MapHttpRoute(
name: "DefaultIndexBackEnd",
routeTemplate: "back-end/{controller}/{token}",
defaults: new { action = "Index", token = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultBackEnd",
routeTemplate: "back-end/{controller}/{action}/{token}",
defaults: new { token = RouteParameter.Optional }
);
}
最佳答案
在TrackController
中试试这个。因为您正在使用多个参数,所以必须将它们声明为可选参数。
[HttpPost]
public Object Index(string token="", string juke="", string track="")
{
}
您可以强制设置参数
token
,因为token
在路由配置DefaultIndexBackEnd
中声明为可选。我认为当[FromBody]
操作有多个参数时,使用POST
属性是一个好主意。关于c# - MVC4 API发布动词引发http 404,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28066078/