2012-08-22 17 views
10

Właśnie stworzył aplikację ASP.NET MVC 4 i dodał domyślny kontroler WebAPIJak wywołać metodę kontrolera WebApi?

public class UserApiController : ApiController 
{ 
    // GET api/default1 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/default1/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // POST api/default1 
    public void Post(string value) 
    { 
    } 

    // PUT api/default1/5 
    public void Put(int id, string value) 
    { 
    } 

    // DELETE api/default1/5 
    public void Delete(int id) 
    { 
    } 
} 

Potem starałem się wywołać metodę get(), wpisując w przeglądarce http://localhost:51416/api/get ale coraz błąd:

<Error> 
<Message> 
No HTTP resource was found that matches the request URI 'http://localhost:51416/api/get'. 
</Message> 
<MessageDetail> 
No type was found that matches the controller named 'get'. 
</MessageDetail> 
</Error> 

mój config trasa:

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

      routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       //defaults: new { controller = "UserApiController", id = RouteParameter.Optional } 
       defaults: new { id = RouteParameter.Optional } 
      ); 

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

Dlaczego to nie działa domyślnie? Co mogę zrobić, aby to naprawić?

Odpowiedz

8

Nie trzeba wstawiać get w adresie URL, ponieważ GET jest typem czasownika HTTP.

Domyślnie przeglądarki wysyłają żądanie GET, jeśli wpiszesz URL.

więc spróbować z http://localhost:51416/api/

Ponieważ UserApiController jest sterownik domyślny api jeśli odkomentuj linię defaults: new { controller = "UserApiController"... w konfiguracji routingu

pamiętać, że nie potrzebują „administrator danych” sufiks podczas określania swoich tras więc poprawne dafaults ustawienia to: defaults: new { controller = "UserApi", id = RouteParameter.Optional } )

lub trzeba wyraźnie określając regulatorowi http://localhost:51416/api/userapi

Możesz rozpocząć naukę o Wep.API i konwencjach routingu opartych na protokole HTTP na ASP.NET Web API site.

+0

Próbowałem 'http: // localhost: 51416/api' getting Zasób nie został znaleziony. ale 'http: // localhost: 51416/api/userapi' działa :). Jak naprawić trasę 'http: // localhost: 51416/api'? – Kuncevic

+0

Aby ustawić 'http: // localhost: 51416/api' działa ** odkomentuj ** tę linię z routingu:' defaults: new {controller = "UserApiController", id = RouteParameter.Optional} 'ponieważ tam określasz wartość domyślną kontroler dla trasy – nemesv

+0

był związany z 'defaults: new {controller =" UserApiController ", id = RouteParameter.Optional}', ale wciąż pobieranie Nie można znaleźć zasobu. podczas wywoływania 'localhost: 51416/api /' – Kuncevic

Powiązane problemy