我有点困惑。我有一个控制器(来自ApiController),具有以下方法:

[ActionName("getusername")]
public string GetUserName(string name)
{
    return "TestUser";
}


我的路由设置如下:

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);


当我尝试用小提琴手中的GET击/api/mycontroller/getusername/test时,我一直收到400错误。

我发现将[FromBody]添加到GetUserName中的name参数时一切正常。

我以某种方式认为[FromBody]用于HttpPost,表示该参数在帖子的正文中,因此GET不需要该参数。看来我错了。

这是如何运作的?

最佳答案

您需要将路由更改为:

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{name}",
    defaults: new { name = RouteParameter.Optional }
);


或将参数名称更改为:

[ActionName("getusername")]
public string GetUserName(string id)
{
    return "TestUser";
}


注意:其他路由参数必须与方法参数名称匹配。

09-13 09:09