Web API控制器 - '动作'查询字符串中的参数

时间:2016-11-29 09:14:27

标签: c# asp.net-core

我有以下Web api控制器

public class ApiController : Controller
{
    [Route("api/test")]
    [HttpGet]
    public string GetData(string key, string action, long id)
    {
        var actionFromQuery = Request.Query["action"];
        return $"{key} {action} {id}";
    }
}

我需要一个名为' action'在查询字符串中,因此它向后兼容现有的API 当我发出get请求时,操作方法参数被错误地分配给web api action ==控制器方法名称。

示例GET
http://SERVER_IP/api/test?key=123&action=testAction&id=456
返回" 123 GetData 456"

我希望它能够返回" 123 testAction 456"
actionFromQuery变量被正确分配给' testAction'。
是'行动'一个无法覆盖的保留变量?
我可以通过更改某些配置来解决此问题吗

我没有配置任何路由,只有services.AddMvc();和app.UseMvc();在我的创业公司。

2 个答案:

答案 0 :(得分:3)

感谢this comment

添加[FromQuery]帮助并正确分配变量

public class ApiController : Controller
{
    [Route("api/test")]
    [HttpGet]
    public string GetData(string key, [FromQuery] string action, long id)
    {
        return $"{key} {action} {id}";
    }
}

答案 1 :(得分:0)

在WebApi路由中,Action参数与路径定义中的占位符配对,用大括号括起来,例如/ API / {foobar的} / {巴兹}。

您遇到的问题是{controller}和{action}是“特殊”占位符,分别为Controller和Action方法的名称保留(尽管后者通常在WebApi路由中省略)。

尽管如此,我还是找不到解决方法:(