3

我有点困惑。我有一个具有以下方法的控制器(从 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 }
);

当我尝试/api/mycontroller/getusername/test在提琴手中使用 GET 时,我不断收到 400 错误。

[FromBody]当我在 GetUserName 中添加 name 参数时,我发现一切正常。

我以某种方式认为它[FromBody]用于HttpPost,表明该参数位于帖子的正文中,因此GET. 看来我错了。

这是如何运作的?

4

2 回答 2

6

您需要将路由更改为:

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

或将参数名称更改为:

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

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

于 2013-02-06T23:05:41.997 回答
1

如果它更接近您要查找的内容,您还可以执行以下操作:

// GET api/user?name=test
public string Get(string name)
{
    return "TestUser";
}

这假设您使用的是ApiController命名UserController并允许您将name参数作为查询字符串传递。这样,您不必指定ActionMethod而是依赖 HTTP 动词和匹配的路由。

于 2013-02-07T19:17:18.900 回答