2013-12-12 87 views
0

所以我想這樣做:如何將字符串傳遞給控制器​​?

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>(); 
    } 

} 

我運行它,它不工作:

沒有HTTP資源被發現匹配請求URI 'http://localhost:43751/api/doWork/asdfasfsaf'

沒有行動上的控制器 '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 } 
     ); 
    } 
+0

如果將'String input'更改爲'String id',會發生什麼情況?你能告訴我們你的Web API路由嗎? –

+2

@Ric實際上,通過Web API,您通常不會在URL中包含操作名稱。按照慣例,以「Get」開頭的任何操作都將與任何「GET」請求相匹配。 –

+0

@ChrisHardie聽起來很有趣。我會收回我的評論。 – Ric

回答

0

這似乎是所有我需要做的就是這個工作是這樣的:

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

因爲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輸入= asdfasfsaf

或者,如果你想要什麼是改變你的URL路由接受你的網址作爲參數的最後部分,你需要像這樣添加到您的RouteConfig.cs文件:

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

您可能要遵循this post瞭解更多信息關於路線映射

相關問題