如何设置Web API控制器以将请求路由到方法参数?

时间:2014-11-14 15:25:05

标签: c# asp.net rest asp.net-web-api

我有一个Web API设置,我想将一个字符串参数传递给GetAutomation方法。 在Global.asax我有:

protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{testName}",
            defaults: new { id = System.Web.Http.RouteParameter.Optional });
        RouteTable.Routes.MapHttpRoute(
            name: "DefaultApiWithAction",
            routeTemplate: "api/{controller}/{action}/{testName}");
    }

在我的AutomationController.cs中,我有:

[ActionName("GetAutomation")]
    [HttpGet]
    public string StartAutomation(string testName)
    {
        //string testName = "MyTest123";
        Vmware.StartAutomation("automation-server", testName);
        return "Automation started for " + testName;
    }

如果我从StartAutomation中删除testName参数并调用:

http://localhost/api/Automation/GetAutomation

它有效。如果我把它重新放入并尝试

http://localhost/api/Automation/GetAutomation/Test123

失败并出现404错误。 知道我做错了吗? 谢谢, 学家

2 个答案:

答案 0 :(得分:1)

Remove the {testName} from the "routeTemplate"

protected void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{testName}",
        defaults: new { id = System.Web.Http.RouteParameter.Optional });
    RouteTable.Routes.MapHttpRoute(
        name: "DefaultApiWithAction",
        routeTemplate: "api/{controller}/{action}");
}

并将参数包含为queryString

E:api / Automation / GetAutomation?testName = Test123

答案 1 :(得分:0)

这是关于评论的问题,如果我理解正确你唯一需要做的就是在函数上声明输入参数

[ActionName("RunMyStuff")]
 public string MyMethodName(bool isAtomic, string blabla, int delayOfSec)
{
    ....Code Placed Here
}

因此调用将与另一个调用类似,但现在您有多个参数,因此您必须使用联系queryString参数。

E:api / Automation / RunMyStuff?isAtomic = true& blabla = mystring& delayOfSec = 23