C# 什么';ASP.NET核心中的HttpRequest.Path和HttpRequest.PathBase之间的区别是什么?
如本文所述:,ASP.NET核心的C# 什么';ASP.NET核心中的HttpRequest.Path和HttpRequest.PathBase之间的区别是什么?,c#,asp.net-core,C#,Asp.net Core,如本文所述:,ASP.NET核心的HttpRequest类包括Path和PathBase属性 这两种属性有什么区别?每个都是用来做什么的?PathBase的含义是什么?同时拥有路径和路径库有什么意义 我找不到任何文档详细说明它为什么是这样-有什么想法吗?在ASP.NET核心中,有一个称为路径库的概念。其基本思想很容易理解:路径基被认为是指向web应用程序的所有传入请求的路径的固定前缀。默认情况下,路径基被视为空字符串 这意味着,默认情况下,当请求进入应用程序时,请求URL的所有路径部分将映射到H
HttpRequest
类包括Path
和PathBase
属性
这两种属性有什么区别?每个都是用来做什么的?PathBase
的含义是什么?同时拥有路径
和路径库
有什么意义
我找不到任何文档详细说明它为什么是这样-有什么想法吗?在ASP.NET核心中,有一个称为路径库的概念。其基本思想很容易理解:路径基被认为是指向web应用程序的所有传入请求的路径的固定前缀。默认情况下,路径基被视为空字符串 这意味着,默认情况下,当请求进入应用程序时,请求URL的所有路径部分将映射到
HttpRequest
对象的path
属性,并且PathBase
属性将设置为string.empty
例如,考虑运行在本地机器上的ASP.NET核心应用程序,并监听端口<代码> 3000 。假设您使用原始kestrel web服务器运行应用程序(因此不涉及反向代理,请求直接到达kestrel)
当您请求URLhttp://localhost:3000/foo/bar
则HttpRequest
对象将具有以下属性:
将设置为HttpRequest.Path
/foo/bar
将设置为HttpRequest.PathBase
string.empty
https://my-application.azurewebsites.net
。当您浏览到URLhttps://my-application.azurewebsites.net/foo/bar
,传入http请求的情况如下:
将设置为HttpRequest.Path
/foo/bar
将设置为HttpRequest.PathBase
string.empty
https://sample-application.contoso.net
并且您已选择示例别名
作为虚拟应用程序的别名。这意味着对asp.net核心web应用程序的所有请求都将有一个以示例别名
开头的路径部分。例如,当您需要应用程序的主页时,您将浏览到https://sample-application.contoso.net/sample-alias
在这种情况下,当您请求URLhttps://sample-application.contoso.net/sample-alias/foo/bar
,应用程序中的HttpRequest
对象将按以下方式执行:
将设置为HttpRequest.Path
/foo/bar
将设置为HttpRequest.PathBase
sample alias
sample alias
,将path属性设置为传入请求路径的剩余部分(在上面的示例中为/foo/bar
).
作为一个经验法则,您可以考虑ASP.NET核心Web应用程序在没有使用任何附加配置的情况下运行良好,当您想通过IIS托管它时。path base属性也是如此(检查以验证请求基本路径是否在stratup时在应用程序内部自动设置)
作为最后一个例子,考虑将您的应用程序托管在Linux机器上,使用NGINX作为反向代理。在这种情况下,您的应用程序将在kestrel web服务器内执行,但它不会直接暴露在公共internet上。向公共互联网公开的东西是nginxweb服务器,它将传入的HTTP请求路由到kestrelweb服务器(执行应用程序的地方)。您可以决定配置nginx,以便所有以前缀
/awesome application
开头的请求都将路由到asp.net核心web应用程序
例如,假设在URLhttps://ingress.contoso.net
:在这种情况下,如果您想请求应用程序的主页,您需要浏览到https://ingress.contoso.net/awesome-application/
在这种情况下,您无法获得awesome-a