tag route password page net mvc for data asp all asp.net-mvc url routing

asp.net mvc - route - ¿Cómo estructuras tus rutas de URL?



tag helpers asp net core (6)

Además, puede considerar usar verbos diferentes para reutilizar las mismas rutas para diferentes acciones. Por ejemplo, una solicitud GET a "Productos / Edición / 45" mostraría el editor del producto, mientras que una POST a la misma URL actualizaría el producto. Puede usar el atributo AcceptVerb para lograr esto:

[AcceptVerb("GET")] public ActionResult Edit(int id) { ViewData["Product"] = _products.Get(id); return View(); } [AcceptVerb("POST")] public ActionResult Edit(int id, string title, string description) { _products.Update(id, title, description); TempData["Message"] = "Changes saved successfully!"; return RedirectToAction("Edit", new { id }); }

¿Hay un patrón específico que los desarrolladores generalmente siguen? Nunca antes lo había pensado mucho en mis aplicaciones web, pero el motor de enrutamiento ASP.NET MVC te obliga a tenerlo en cuenta.

Hasta ahora me ha gustado la estructura de controlador / acción / índice (por ejemplo, Productos / Editar / 1), pero estoy luchando con URLs más complejas.

Por ejemplo, digamos que tiene una página que enumera todos los productos que un usuario tiene en su cuenta. ¿Como lo harias? En lo alto de mi cabeza puedo pensar en las siguientes posibilidades para una página de listado y una página de edición:

  1. Usuario / {ID de usuario} / Productos / Lista, Usuario / {id. De usuario} / Productos / Editar / {id. De producto}
  2. Usuario / {ID de usuario} / Productos, Usuario / {id. De usuario} / Productos / {id. De producto}
  3. Productos? UserID = {id de usuario}, Products / Edit / {product id}

Estoy seguro de que hay muchos otros que me estoy perdiendo. ¿Algún consejo?



Me gustan las URL RESTful, fáciles de usar y pirateables.

¿Qué significa esto? Comencemos con URL fáciles de usar . Para mí, una URL fácil de usar es algo fácil de escribir y fácil de recordar /Default.aspx?action=show&userID=140 no cumple con ninguno de estos requisitos. Sin embargo, una URL como `/ users / troethom'' parece lógica.

Esto lleva al siguiente punto. Una URL pirateable es una URL que el usuario puede modificar y aún obtener un resultado. Si la URL es pirateable y la URL de mi perfil es /users/troethom , sería seguro eliminar mi nombre de usuario para obtener una lista de usuarios ( /users ).

Usar URLs RESTful es bastante similar a las ideas detrás de mis otras sugerencias. Está diseñando URL para un usuario y no para una máquina y, por lo tanto, la URL debe relacionarse con el contenido y no con el backend técnico de su sitio. Una URL como ''/ users'' tiene más sentido que ''/ users / list'' y una URL como ''/ category / programming / javascript'' (que representa la subcategoría ''javascript'' en la categoría ''programación'' es mejor que ''/ category / show / 12''.

De hecho, es más difícil omitir las identificaciones, pero en mi mundo vale la pena el esfuerzo.

Consulte también la sección Cómo entender los URI en los problemas comunes de implementación HTTP del W3C. Tiene una lista de dificultades comunes al diseñar URI. Otro buen recurso es Resourceful Vs Hackable Search URLs .


Para agregar a los comentarios de troethom, RESTful generalmente también significa que, por ejemplo, para crear un nuevo usuario PONGA una representación a / users / newusername

RESTful básicamente utiliza los 5 métodos HTTP estándar (GET, PUT, POST, DELETE, HEAD) para controlar / acceder al contenido.

Ok, esto no es fácil para un navegador web, pero siempre puedes utilizar POST sobrecargado (publicar en / users / username con una representación de un usuario para cambiar algunos de los detalles, etc.

Es una buena manera de hacer las cosas, recomendaría leer los servicios web de RESTFul para obtener una mejor comprensión: D (¡y es un maldito buen libro!)