动态检测requstURI + ASP.NET核心
Detect requstURI dynamically + ASP.NET Core
我正在使用 web.config 使用 .Net Core 设置一些重定向规则。
<rule name="About Page" stopProcessing="true">
<match url="about.aspx" />
<action type="Redirect" url="/Home/About" redirectType="Permanent" />
</rule>
...
因此,如果用户输入 www.test.com/about.aspx,它会重定向到 www.test.com/Home/About页。
我的问题是如何将用户在 URL 中输入的内容传递给控制器方法?例如,www.test.com/about.aspx 在这种情况下?
我试过
var currentURI = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
但是那个检测重定向的 uri (www.test.com/Home/About),而不是最初输入 URL (www.test.com/about.aspx )
我在 HomeController
、IActionResult
About
方法中使用以下代码。
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))
HttpRequestMessage
的 requestUri
参数目前不是动态的,因此无法检测用户在 URL 中输入的内容。
感谢帮助。
让我们更清楚地描述 HTTP 请求的流程:
- HTTP 客户端向
http://www.test.com/about.aspx
发送初始请求
- 您的重定向规则命中并且服务器响应 301 代码并重定向 URL
http://www.test.com/Home/About
在位置 header。
- HTTP 客户端收到此响应并意识到它应该使用新的 URL
重新发送请求
- HTTP 客户端向新 URL
http://www.test.com/Home/About
. 发送第二个请求
第二个请求不包含对原始 url http://www.test.com/about.aspx
的任何引用。这就是为什么 您无法在服务器端获得原始 url。
如果您的应用程序逻辑需要有关初始 url 的信息,我在这里看到两个选项:
您可以将原始 url 作为参数添加到重定向的 url,如下所示:
http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx
您必须使用新模板更新重定向规则,并在 ASP.Net 核心应用程序中调整路由。
您可以使用路由而不是重定向。在这种情况下,不会发生 301 重定向,服务器将处理用户输入的 url 的初始请求,但将为两个 url 调用相同的控制器操作。
选择更适合您的方法。希望这会有所帮助。
我正在使用 web.config 使用 .Net Core 设置一些重定向规则。
<rule name="About Page" stopProcessing="true">
<match url="about.aspx" />
<action type="Redirect" url="/Home/About" redirectType="Permanent" />
</rule>
...
因此,如果用户输入 www.test.com/about.aspx,它会重定向到 www.test.com/Home/About页。
我的问题是如何将用户在 URL 中输入的内容传递给控制器方法?例如,www.test.com/about.aspx 在这种情况下?
我试过
var currentURI = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
但是那个检测重定向的 uri (www.test.com/Home/About),而不是最初输入 URL (www.test.com/about.aspx )
我在 HomeController
、IActionResult
About
方法中使用以下代码。
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))
HttpRequestMessage
的 requestUri
参数目前不是动态的,因此无法检测用户在 URL 中输入的内容。
感谢帮助。
让我们更清楚地描述 HTTP 请求的流程:
- HTTP 客户端向
http://www.test.com/about.aspx
发送初始请求
- 您的重定向规则命中并且服务器响应 301 代码并重定向 URL
http://www.test.com/Home/About
在位置 header。 - HTTP 客户端收到此响应并意识到它应该使用新的 URL 重新发送请求
- HTTP 客户端向新 URL
http://www.test.com/Home/About
. 发送第二个请求
第二个请求不包含对原始 url http://www.test.com/about.aspx
的任何引用。这就是为什么 您无法在服务器端获得原始 url。
如果您的应用程序逻辑需要有关初始 url 的信息,我在这里看到两个选项:
您可以将原始 url 作为参数添加到重定向的 url,如下所示:
http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx
您必须使用新模板更新重定向规则,并在 ASP.Net 核心应用程序中调整路由。
您可以使用路由而不是重定向。在这种情况下,不会发生 301 重定向,服务器将处理用户输入的 url 的初始请求,但将为两个 url 调用相同的控制器操作。
选择更适合您的方法。希望这会有所帮助。