【问题标题】:How to run ASP.NET MVC Web API controller method by query parameter value?如何通过查询参数值运行 ASP.NET MVC Web API 控制器方法?
【发布时间】:2020-06-21 18:24:27
【问题描述】:

我尝试根据查询参数而不是普通路由运行控制器方法(例如“:MyController\DoSomething)但出现错误。如何解决这个问题?

[Route("MyController?Command=DoTask1")]
public IHttpActionResult Task1()
{ 
    return Ok();
}

[Route("MyController?Command=DoTask2")]
public IHttpActionResult Task2()
{ 
    return Ok();
}
....

【问题讨论】:

  • 你需要使用这个具体的实现吗?为什么不使用“正常”路线?如果您只想从查询参数派生命令类型,您可以创建一个接受Command 参数的端点,然后根据该参数的值调用Task1()Task2()
  • @devNull,我使用这种方式是因为客户端已经在使用这种类型的路由。我也考虑过单端点接受方式,但我认为很难控制不同的请求模型。
  • @IbnAdam 请求模型是什么意思?您传递给控制器​​操作或从这里返回的数据?如果输入数据 - 从您的问题中不清楚您想要将某些内容传递给控制器​​。如果您的意思是输出数据 - ActionResult 可以返回任何内容

标签: c# asp.net-web-api controller routes


【解决方案1】:
[Route("[controller]")]
    public class MyController : Controller
    {
        [HttpGet("")]
        public IActionResult Hello(string command)
        {
            switch (command.ToLowerInvariant())
            {
                case "dotask1":
                    Task1();break;
                case "dotask2":
                    Task2(); break;
            }
            return Ok();
        }

        private void Task1()
        {

        }
        private void Task2()
        {

        }
    }

这样您将只有一个端点,并且这些路由将是有效的:

/my?command=DoTask1

/my?command=DoTask2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多