Pregunta

Me gustaría tener direcciones URL que son incluso más corto que / Controlador {} / {Acción} / {ID}.

Por ejemplo, me gustaría Controlador {} / {id}, donde {ID} es una cadena.

Esto permitiría caminos simples, por ejemplo, Usuarios / nombre de usuario, Páginas / Pagename, Noticias / Newsname. Me gusta este mejor que el que requiere la acción / Detalles de la URL (Usuarios / Detalles / nombre de usuario), que es menos elegante para el usuario final.

Puedo hacer fácilmente este trabajo mediante la creación de rutas personalizadas para cualquier controlador que quiero este nivel de simplicidad para. Sin embargo, esto causa dolores de cabeza cuando se trata de la aplicación de otras medidas, como {controlador} / {Acción}, donde {Acción} = 'Crear', ya que, en este caso los de cuerda {acción} conflictos con la cadena {ID}.

Mi pregunta: ¿Cómo puedo tener 'reservada' palabras, de modo que si la URL es / Noticias / Crear, se trata como una acción, pero si la URL es otra cosa, por ejemplo, / Noticias / A-gorila-ate-my-tesis, entonces es tratado como un Id.

Estoy esperando que pueda definir esta hora de configurar mis rutas?

Actualización:

Uso de la respuesta de Ben Griswold, he actualizado las rutas predeterminadas ASP.NET MVC ser:

    routes.MapRoute(
    "CreateRoute",                                            // route name
    "{controller}/Create",                                    // url with parameters
    new { action = "Create" }                                 // parameter defaults
);

routes.MapRoute(
    "DetailsRoute",                                           // route name
    "{controller}/{id}",                                      // url with parameters
    new { action = "Details" }                                // parameter defaults
);

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Esto funciona a las mil maravillas y medios, por defecto, las páginas de detalles se utilizan la URL simplificada, pero todavía será capaz de dirigirse a una acción específica si quiero (actualización / eliminar / detalles).

Por supuesto, tendrá que rechazar la palabra reservada "Crear", como un ID, de lo contrario el usuario puede tratar de crear un artículo, por ejemplo, con el nombre de "Crear", que nunca se puede tener acceso.

Esto es realmente agradable. Si alguien ve que hay algo malo con este enfoque, interrumpiría, pero me gusta hasta ahora.

¿Fue útil?

Solución

Creo que uno se queda con la creación de una ruta para cada palabra reservada. Por ejemplo,

routes.MapRoute("CreateRoute",
               "{controller}/Create",
                new { action = "Create" }
            );

manejaría / Noticias / Crear, / Usuarios / Crear, etc. Mientras que esta ruta está en la lista antes de que su otra ruta personalizada, creo que usted está cubierto.

Me imagino que tendrá rutas por adición de diversas operaciones CRUD que siguen un patrón similar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top