2012-08-22 17 views
10

solo he creado asp.net mvc 4 aplicación y el controlador por defecto WebAPI añadido¿Cómo llamar a un método de controlador 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) 
    { 
    } 
} 

Entonces yo estaba tratando de llamar al método get() escribiendo en el navegador http://localhost:51416/api/get pero conseguir el error:

<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> 

mi ruta de configuración:

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

por qué no funciona por defecto? ¿Qué puedo hacer para arreglar eso?

Respuesta

8

No necesita poner get en la URL porque GET es el tipo del verbo HTTP.

Y de forma predeterminada los navegadores envían solicitud GET si escribe una URL.

lo tanto, tratar con http://localhost:51416/api/

Debido UserApiController es el controlador de API por defecto si se elimina el comentario de la línea defaults: new { controller = "UserApiController"... en la configuración del enrutamiento

Tenga en cuenta que no es necesario el sufijo "controlador" al especificar sus rutas por lo que los ajustes correctos dafaults es: defaults: new { controller = "UserApi", id = RouteParameter.Optional } )

o si necesita especificar explícitamente el controlador http://localhost:51416/api/userapi

Puede comenzar a aprender sobre Wep.API y las convenciones de enrutamiento basadas en verbos HTTP en el ASP.NET Web API site.

+0

estaba intentando 'http: // localhost: 51416/api' getting No se puede encontrar el recurso. pero 'http: // localhost: 51416/api/userapi' funcionando :). Cómo reparar la ruta 'http: // localhost: 51416/api'? – Kuncevic

+0

Para hacer 'http: // localhost: 51416/api' work ** descomentar ** esta línea del enrutamiento:' defaults: new {controller = "UserApiController", id = RouteParameter.Optional} 'porque allí especifica el valor predeterminado El controlador para la ruta – nemesv

+0

estaba vinculando con 'defaults: new {controller =" UserApiController ", id = RouteParameter.Optional}' pero sigue obteniendo El recurso no se puede encontrar. al llamar a 'localhost: 51416/api /' – Kuncevic

Cuestiones relacionadas