2013-12-12 4 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', который соответствует запросу.

Что я делаю неправильно?

Вот мой Routing Configuration:

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'? Можете ли вы показать нам свою маршрутизацию веб-API? –

+2

@Ric На самом деле, с веб-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, чтобы принять последнюю часть вашего URL в качестве параметра, вам нужно добавить что-то вроде этого в файл RouteConfig.cs:

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

вы можете следовать this post для получения дополнительной информации относительно составления маршрута

Смежные вопросы