En ASP.NET core existe este concepto conocido como la base de ruta . La idea básica es bastante fácil de entender: la base de ruta se considera un prefijo fijo para la ruta de todas las solicitudes entrantes a su aplicación web. Por defecto, la base de la ruta se considera la cadena vacía.
Esto significa que, de forma predeterminada, cuando una solicitud ingresa a su aplicación, toda la parte de la ruta de la URL de la solicitud se asignará a la Path
propiedad del HttpRequest
objeto y la PathBase
propiedad se establecerá enstring.empty
.
Como ejemplo, considere una aplicación principal de asp.net que se ejecuta en su máquina local y escucha el puerto 3000
. Suponga que está ejecutando la aplicación utilizando el servidor web raw kestrel (por lo que no hay un proxy inverso involucrado, las solicitudes llegan directamente a kestrel).
Cuando solicite la URL http://localhost:3000/foo/bar
, el HttpRequest
objeto tendrá las siguientes propiedades:
HttpRequest.Path
se establecerá en /foo/bar
HttpRequest.PathBase
se establecerá en string.empty
Obtendrá la misma situación cuando decida alojar su aplicación en Azure, utilizando un servicio de aplicaciones de Windows.
En este escenario de alojamiento, el valor predeterminado para una aplicación web central ASP.NET se ejecuta dentro del mismo proceso que el proceso de trabajo de IIS. Esto básicamente significa que solo hay un proceso involucrado; de nuevo, no hay proxy inverso y el servidor web kestrel no se utiliza en absoluto: la solicitud es manejada por IIS directamente (puede encontrar algunos detalles aquí si está interesado).
En ese caso, la URL pública para su aplicación será algo así https://my-application.azurewebsites.net
. Cuando navega a la URL https://my-application.azurewebsites.net/foo/bar
, la situación para la solicitud HTTP entrante será la siguiente:
HttpRequest.Path
se establecerá en /foo/bar
HttpRequest.PathBase
se establecerá en string.empty
De nuevo, como antes, la base del camino es la cadena vacía.
Existen diferentes escenarios de alojamiento en los que puede decidir exponer su aplicación utilizando un directorio virtual.
Por ejemplo, puede decidir alojar la aplicación web básica asp.net en su propio centro de datos utilizando una máquina virtual de Windows con IIS instalado. En ese caso, es posible que tenga un sitio web existente en IIS y desee crear una aplicación virtual que tenga un alias adecuado en ese sitio web. Nuevamente en este escenario, como se explicó anteriormente para el servicio de la aplicación de Windows azul, no hay un proxy inverso involucrado y el servidor web kestrel no se usa en absoluto: la solicitud es manejada directamente por el proceso de trabajo de IIS ( en el modelo de proceso de alojamiento ).
Suponga que la URL pública de su sitio web es https://sample-application.contoso.net
y que ha elegido el sample-alias
como el alias para la aplicación virtual. Esto implica que todas las solicitudes a su aplicación web básica asp.net tendrán una parte de ruta que comenzará sample-alias
. Por ejemplo, cuando desee solicitar la página de inicio de su aplicación, buscará https://sample-application.contoso.net/sample-alias
.
En este caso, cuando solicite la URL https://sample-application.contoso.net/sample-alias/foo/bar
, el HttpRequest
objeto en su aplicación se realizará de la siguiente manera:
HttpRequest.Path
se establecerá en /foo/bar
HttpRequest.PathBase
se establecerá en sample-alias
Debido a la forma en que se construye el host web predeterminado para una aplicación principal ASP.NET, este escenario que involucra aplicaciones virtuales de IIS funciona de inmediato y la tubería de middleware es consciente del prefijo común a todas las solicitudes HTTP entrantes y es capaz de establezca la base de ruta sample-alias
y la propiedad de ruta a la parte restante de la ruta de la solicitud entrante ( /foo/bar
en mi ejemplo anterior).
Como regla general, puede considerar que una aplicación web central ASP.NET funciona bien sin ninguna configuración adicional cuando desee alojarla mediante IIS. Esto también es cierto para la propiedad base de ruta (marque aquí para verificar que la ruta base de solicitud se establece automáticamente dentro de su aplicación en la estrategia).
Como último ejemplo, considere alojar su aplicación en una máquina Linux, usando nginx como proxy inverso. En este caso, su aplicación se ejecutará dentro del servidor web de Kestrel, pero no estará directamente expuesta a Internet público. Lo que está expuesto a Internet público es el servidor web nginx que enruta las solicitudes HTTP entrantes al servidor web kestrel (donde se ejecuta su aplicación). Puede decidir configurar su nginx para que todas las solicitudes que comiencen por el prefijo /awesome-application
se enruten a su aplicación web principal asp.net.
Como ejemplo, suponga exponer nginx a Internet público en la URL https://ingress.contoso.net
: en este caso, si desea solicitar la página de inicio de su aplicación, debe buscarla https://ingress.contoso.net/awesome-application/
.
En este caso, no puede obtener la awesome-application
base de ruta de solicitud de forma gratuita (de forma predeterminada, kestrel no lo conoce y considera que la base de ruta de solicitud es string.empty
).
Para que Kestrel conozca la base de la ruta de solicitud, debe usar UsePathBaseMiddleware como primer elemento en su canalización de middleware.
Si necesita más detalles para este caso, siga esta documentación y vea también esta pregunta de stackoverflow .
Map
se usa, los segmentos de ruta coincidentes se eliminanHttpRequest.Path
y se agregan aHttpRequest.PathBase
cada solicitud. .