我有一个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错误。 知道我做错了吗? 谢谢, 学家
答案 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