C# 如何将字符串传递给控制器?

C# 如何将字符串传递给控制器?,c#,asp.net-web-api,C#,Asp.net Web Api,所以我试着这样做: http://localhost:43751/api/doWork/asdfasfsaf 这里是控制器: public class DoWorkController : ApiController { public User GetWork(String input) { Dictionary<int, Work> users = DataObjects.Work.find(input); return users.Val

所以我试着这样做:

http://localhost:43751/api/doWork/asdfasfsaf
这里是控制器:

public class DoWorkController : ApiController
{
    public User GetWork(String input) {
        Dictionary<int, Work> users = DataObjects.Work.find(input);
        return users.Values.First<Work>();
    }

}

看来我要做的就是让它发挥作用:

public class DoWorkController : ApiController{
    public User GetDoWork(String ID) {
        Dictionary<int, Work> users = DataObjects.Work.find(input);
        return users.Values.First<Work>();
    }
}
公共类DoWorkController:ApicController{
公共用户GetDoWork(字符串ID){
字典用户=DataObjects.Work.find(输入);
返回users.Values.First();
}
}

因为MVC认为您引用的是不同的URL。您需要定义一个侦听HttpGet或HttpPost类型请求的方法:

[HttpGet]
public ActionResult doWork(string input) {
 // do processing and return the selected user as a model back to the view
 User user = YourGetUserMethod(input);
 return View(user);
}
所以您可以将其作为:/api/doWork?input=asdfasfsaf调用

或者,如果您希望更改URL路由以接受URL的最后一部分作为参数,则需要向RouteConfig.cs文件中添加类似的内容:

routes.MapRoute(
   name: "Default",
   url: "{controller}/{action}/{id}",
   defaults: new { controller = "DoWork", action = "doWork", id = UrlParameter.Optional }
);

您可能希望了解有关路线映射的其他信息

如果将
字符串输入
更改为
字符串id
,会发生什么情况?您可以向我们展示您的Web API路由吗?@Ric实际上,使用Web API时,您通常不会在URL中包含操作名称。按照惯例,任何以“Get”开头的操作都将与任何“Get”请求匹配。@ChrisHardie,听起来很有趣。我将收回我的评论。@ChrisHardie在这种情况下他是否不想要
/api/Work/asdfasfsaf
?在这种情况下,URL将是
http://localhost:43751/api/DoWork/Work?input=asdfasfsaf
routes.MapRoute(
   name: "Default",
   url: "{controller}/{action}/{id}",
   defaults: new { controller = "DoWork", action = "doWork", id = UrlParameter.Optional }
);