2016-11-29 94 views
3

我有以下的Web API控制器的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}"; 
    } 
} 

我需要一个名为查询字符串“行动”参数所以它与现有的API向后兼容。
当我发出get请求时,action方法参数被错误地分配给web api action == controller method name。

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

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

我没有配置任何路由,只有services.AddMvc();和app.UseMvc();在我的启动。

+4

尝试注释[FromUri]'属性的'action'参数 –

+1

谢谢,添加'[FromQuery]'修复了它(使用ASP.NET Core)。 添加这个答案作为答案,我会接受它。 – stkxchng

回答

1

解决由于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}"; 
    } 
} 
0

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

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

我一直没能找到一个办法解决它尚未虽然:(