net mvc component asp asp.net asp.net-mvc iis architecture asp.net-mvc-5

component - Estructura de carpetas personalizadas en ASP.NET MVC 5



render partial asp net core (1)

Estoy tratando de determinar si es posible (o práctico) implementar la Arquitectura gritona de Uncle Bob en ASP.NET MVC 5 en lugar de utilizar la estructura de carpetas predeterminada.

Aquí hay un enlace a una descripción de Screaming Architecture: http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html

Una estructura hipotética de carpetas se vería así:

Raíz

  • Clientes
    • Controladores
      • CustomerController.cs
    • Modelos
      • Customer.cs
    • Puntos de vista
      • Index.cshtml
      • Details.cshtml
      • Update.cshtml
  • Empleados
    • Controladores
      • EmployeesController.cs
    • Modelos
      • Empleado.cs
    • Puntos de vista
      • Index.cshtml
      • Details.cshtml
      • Update.cshtml
  • Compartido
    • Puntos de vista
      • _Layout.cshtml
      • Error.cshtml
  • _ViewStart.cshtml
  • Web.config

Las rutas URL correspondientes se verían así:

Creé un RazorViewEngine personalizado y agregué los formatos de ubicación de vista apropiados (por ejemplo, "~ / {1} / Views / {0} .cshtml") y los formatos de ubicación de vista parcial (por ejemplo, "~ / Shared / Views / {0}. cshtml "). También moví el _ViewStart.cshtml compartido a la raíz y fusioné el web.config de la carpeta Views / Shared con el nivel raíz web.config para evitar tener que duplicar estos dos archivos en todas las carpetas de View.

Todo funciona muy bien, sin embargo, si trato de navegar a una página de índice (por ej., Http://www.example.com/employees/ ) obtengo un error 403.14 (prohibido). Todas las demás rutas (incluido http://www.example.com/employees/index ) funcionan bien.

Supongo que IIS está bloqueando explícitamente la ruta al método de índice del controlador porque la URL coincide con una carpeta en el sistema de archivos y la exploración del directorio está deshabilitada de forma predeterminada. Sin embargo, si habilito la exploración de directorios, en realidad me lleva al listado del directorio real en lugar de enrutar al método de índice del controlador.

Puedo mover las carpetas Clientes y Empleados a una subcarpeta (es decir, moverlos de la raíz) y todo funciona bien, pero me gustaría tratar de mantener estas carpetas en el nivel superior (según las pautas de Arquitectura de gritos).

¿Alguien tiene una solución para este problema?

Tenga en cuenta que MVC Areas no es la solución que estoy buscando, ya que no permite la estructura de carpetas descrita anteriormente (es decir, carpetas de alto nivel con el nombre de casos de alto nivel y vistas contenidas directamente en la carpeta Views en lugar de en un subcarpeta).


Apuesto a que tienes razón sobre IIS entonces. Si tiene dos rutas asignadas al mismo recurso, la ruta física se verifica primero en el lado de IIS.

Estaba cavando alrededor de la configuración de rutas y encontré la propiedad RouteExistingFiles en RouteCollection y creo que esto podría funcionar.

Establecí el valor en true y probé localmente con una carpeta vacía en el proyecto, una ruta redireccionando a Home/Index y navegando a localhost:xxx/MyFolder . Funcionó correctamente

Entonces, todo lo que debe hacer es establecer esta propiedad en verdadero para que elija rutas Asp.net primero en lugar de rutas físicas.