asp.net mvc - visual - ¿Por qué.NET genera dos archivos web.config en una aplicación MVC asp.net?
mvc 4+ (6)
Además de distribuir sus configuraciones para su proyecto de manera simple, puede convertirlo en tiempo de ejecución para hacer una publicación. Una mano en la rueda. Ver:
Soy nuevo en MVC 3. ¿Cuál es la razón para usar dos archivos web.config?
¿Cuál es la diferencia entre esos 2 archivos web.config, y cuál es el propósito de cada uno y su función?
El archivo web.config existe en las carpetas Vistas para evitar el acceso a sus vistas por cualquier medio que no sea su controlador. En el patrón de diseño de MVC, los controladores deben enrutar las solicitudes y devolver una vista representada al cliente que realiza la llamada.
significa que localhost9999: //Home/Index.cshtml no debe ser accesible directamente.
La configuración de ASP.NET se almacena en archivos web.config
(archivos XML).
Estos archivos pueden aparecer en muchos directorios en una aplicación ASP.NET. Ayudan a configurar el comportamiento de la aplicación incluso antes después de la implementación, en función del hecho de que puede editarlos con el bloc de notas. También mantienen separados tu código y tus datos de configuración.
Cada archivo web.config
aplica al directorio que existe y TODOS los subdirectorios secundarios. Web.config
archivos Web.config
en el directorio secundario se pueden usar para anular el archivo web.config
del padre.
Tiene la opción de anular los archivos o directorios individuales utilizando el elemento de ubicación. Ver LINK
Las reglas de herencia de configuración son como foillows.
Primero está el archivo machine.config que se encuentra generalmente en systemroot/Microsoft.NET/Framework/versionNumber/CONFIG/
En el mismo directorio existe un archivo ''master'' web.config que define la configuración de TODAS las aplicaciones asp.net que se ejecutan en la máquina.
Luego vienen sus archivos web.config que existen en su aplicación.
Más información:
La vista tiene su propia configuración. Si está trabajando con áreas, entonces conocerá más de una configuración.
En realidad, el punto es que Web.Config de view es para ver la configuración específica, como bloquear el acceso directo a las vistas.
EDIT 1: Más Explicación como se le preguntó en los comentarios.
El archivo web.config existe en las carpetas Vistas para evitar el acceso a sus vistas por cualquier medio que no sea su controlador. En el patrón de diseño de MVC, los controladores deben enrutar las solicitudes y devolver una vista representada al cliente que realiza la llamada. Eso significa que localhost9999: //Home/Index.cshtml no debe ser accesible directamente.
Me gustaría añadir a esto que Web.Config en la carpeta / Views es una gran (si no la) forma de declarar espacios de nombres específicamente para sus vistas. En una aplicación web es muy posible que casi todas las vistas obtengan un ViewModel (en lugar de su modelo real) pasado a él. Declarar el espacio de nombre completo después de @model o tener el mismo @using App.Web.Viewmodels se vuelve tedioso. De esta forma, todos los modelos de vista están disponibles automáticamente y debe realizar un trabajo adicional para obtener el alcance de los modelos reales, que luego configurarán algunas alarmas de inmediato.
Además, generalmente una aplicación puede obtener muchos métodos de extensión específicamente para usar en la vista (el HTML-helper salta a la mente). Tiene sentido definir el espacio de nombres para esta clase de extensión en /Views/Web.Config. De esta forma, nunca se preguntará "¿Por qué IntelliSense no puede encontrar mi método @ Html.ImageLink () ??"
Este es un ejemplo de herencia de archivos web.config
. Desde MSDN
Puede distribuir archivos de configuración de ASP.NET en los directorios de sus aplicaciones para configurar las aplicaciones ASP.NET en una jerarquía de herencia. Esta estructura le permite alcanzar el nivel de detalle de configuración que sus aplicaciones requieren en los niveles de directorio apropiados sin afectar la configuración de los niveles superiores de directorio.
Específicamente, para proyectos de MVC, el web.config
en el subdirectorio View
se usa para adaptar los archivos .cshtml
/ .aspx
. Puede usar archivos web.config
en subcarpetas para ampliar, anular y eliminar configuraciones heredadas de la propia raíz de la aplicación y más arriba en la jerarquía, por ejemplo, hasta machine.config
Las configuraciones comunes en /Views/web.config
incluyen:
- Las solicitudes de bloqueo que intentan acceder a las vistas de razor y aspx directamente (estas deben ser servidas desde Controladores a través de las rutas apropiadas). Una respuesta
404
está configurada para tales solicitudes directas, por ejemplo
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
- Para configurar los espacios de nombres de importación predeterminados para las páginas de vista, que de otro modo tendrían que agregarse explícitamente mediante el
using
. Puede agregar espacios de nombres para sus ensambles personalizados comunes aquí (por ejemplo, extensiones personalizadas html helper), por ej.
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
...
- Para configurar el filtro Anti-xss
RequestValidation
para MVC. El comentario agregado en la configuración lo explica mejor:
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->