2012-06-23 40 views
8

Estoy trabajando en asp.net web api. Estoy tratando de establecer la ruta por defecto para mi proyecto en el archivo global.asax como,Cómo cambiar la ruta predeterminada en asp.net web api

localhost:45678/api/Products 

Pero no encontré ningún formato similar al modelo de ASP.NET MVC ruta como

url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

Siempre vuelve a dirigir a la página de inicio (HomeController). por favor guíame.

+0

¿Qué quiere decir con "Siempre me redirige a la página de inicio". ¿Quiere decir que cuando navega a localhost: 45678/api/Products lo redirecciona o cuando ejecuta su proyecto desde Visual Studio la primera página que ingresa es su página de inicio? –

+0

cuando ejecuto mi proyecto me redirige a la página de inicio. –

+0

He actualizado mi respuesta en respuesta a su comentario. –

Respuesta

8

Compruebe su clase RouteConfig en su carpeta App_Start. Debería ver la ruta predeterminada debajo de la cual puede cambiar.

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

EDITAR

Después de leer sus comentarios, creo que el problema no está en las rutas. No estoy seguro de por qué desea querer para hacerlo, pero solo necesita especificar la URL de inicio para su proyecto. Haga clic derecho en su proyecto web - haga clic en Propiedades - haga clic en la ficha Web - en Acción de inicio seleccione Ingrese la URL e ingrese http://localhost:45678/api/Products en el cuadro. Guarde su proyecto y ejecute nuevamente. Debería comenzar en la nueva ubicación.

+0

He intentado con este código en global.asax 'routes.MapHttpRoute ( name:" DefaultApi ", routeTemplate:" api/{controller}/{id} ", valores predeterminados: new {controller =" Products ", id = RouteParameter.Optional} ); 'pero sigue redirigiendo a la página de inicio. No encontré la clase RouteConfig en App_Start –

+0

¿Tiene un controlador llamado "ProductsController" que hereda de ApiController y tiene un método "público IEnumerable Get()" en este controlador? –

+0

sí, señor, tengo 'public IEnumerable GetAll() { return products; } 'en productscontroller: ApiController –

4

El problema puede ser el error común que casi muchas personas se meten.

El hecho aquí es que todas las rutas se recopilan bajo la colección System.Web.Routing.RouteTable.Routes, independientemente del marco que utilice. Por lo tanto, si coloca la ruta predeterminada ASP.NET MVC antes de la ruta API web ASP.NET, la ruta ASP.NET Web API nunca se explorará porque la ruta MVC coincidirá.

Supongo que este es el caso aquí mirando lo que ha proporcionado hasta ahora. Si ese no es el caso, cargue la solución completa en algún lado y la gente puede verla en su totalidad.

+0

así que ¿puedo saber qué hacer? –

0

[EDIT: Mi respuesta es la misma que la de Kevin]

¿Quiere decir que cuando se ejecuta el proyecto de Visual Studio, se abre un navegador a la página principal del proyecto?

La plantilla de proyecto de la API web contiene un controlador MVC más un controlador de API web.

El URI "http: // localhost: xxxx /" va el controlador MVC, mientras que "http: // localhost: xxx/api/products" va al controlador API.

Cuando ejecuta el proyecto en Visual Studio, navegará a "http: // localhost: xxxx" de forma predeterminada. En operación normal, un cliente solicitaría cualquier URI que quisiera.

Puede cambiar la configuración de Visual Studio en Propiedades del proyecto/Web/Acción de inicio.

1

En realidad, si estamos en condiciones de establecer la ruta predeterminada en propiedades-> web-> ubicación de inicio. entonces, ¿cuál es la necesidad de tablas de rutas, rutas personalizadas, RegisterRoutes en el archivo global.asax?Traté de esta manera

en un primer momento parece que,

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

Ahora quiero hacer localhost:xxxx/api/products como ruta por defecto para mi api web a continuación,

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

Pero los resultados de ninguna utilidad .

+2

¿Podría mejorar su pregunta en lugar de publicar una actualización como respuesta?(SE no funciona como un foro) Gracias –

+1

Leandro tiene razón, esto debe ser editado en la pregunta original. Recomendar eliminación –

0

Creo que has bailado alrededor de la solución, pero te perdiste la marca. Prueba esto:

  1. Asegúrese de que está llamando GlobalConfiguration.Configure (WebApiConfig.Register); en su Global.asax.cs.

  2. En WebApiConfig.Register() Establecer la ruta por defecto como:

    routes.MapHttpRoute (nombre: "DefaultApi", routeTemplate: "api/{Controller}/{id}", valores predeterminados: nueva {controller = "Productos", id = RouteParameter.Optional});

  3. En la configuración del proyecto web asegúrese de tener "Inicio Url" conjunto de propiedades como:

    localhost: 45678

buena suerte.

0

Al reiniciar VS con el permiso de administrador resolvió este problema por mí. Información del entorno: - SO: Windows 10 (64 bit) - Visual studio: 2017.

Cuestiones relacionadas