【问题标题】:Web API Controller - 'action' parameter in query stringWeb API 控制器 - 查询字符串中的“操作”参数
【发布时间】:2016-11-29 09:14:27
【问题描述】:

我有以下 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 请求时,action 方法参数被错误地分配给 web api action == 控制器方法名称。

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

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

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

【问题讨论】:

  • 尝试用[FromUri]属性注释action参数
  • 谢谢,添加[FromQuery] 已修复。 (使用 ASP.NET 核心)。将此添加为答案,我会接受。

标签: c# asp.net-core


【解决方案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}";
    }
}

【讨论】:

    【解决方案2】:

    在 WebApi 路由中,Action 参数与路由定义中的占位符配对,在花括号中,例如/api/{foobar}/{baz}.

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

    我还没有找到解决它的方法:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 2012-08-05
      相关资源
      最近更新 更多