我正在尝试创建一个基于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/

10-10 16:57