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

时间:2013-12-12 16:01:51

标签: 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.Values.First<Work>();
    }

}

我运行它并且它不起作用:

  

未找到与请求URI 'http://localhost:43751/api/doWork/asdfasfsaf'匹配的HTTP资源。

  

在与该请求匹配的控制器“DoWork”上未找到任何操作。

我做错了什么?

这是我的路由配置:

    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

2 个答案:

答案 0 :(得分:0)

似乎我需要做的就是让它发挥作用:

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

答案 1 :(得分:0)

因为MVC认为您指的是其他网址。您需要定义一个正在侦听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 }
);

您可能需要关注this post以获取有关路线映射的其他信息