动态检测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 )

我在 HomeControllerIActionResult About 方法中使用以下代码。

using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))

HttpRequestMessagerequestUri 参数目前不是动态的,因此无法检测用户在 URL 中输入的内容。

感谢帮助。

让我们更清楚地描述 HTTP 请求的流程:

  1. HTTP 客户端向 http://www.test.com/about.aspx
  2. 发送初始请求
  3. 您的重定向规则命中并且服务器响应 301 代码并重定向 URL http://www.test.com/Home/About 在位置 header。
  4. HTTP 客户端收到此响应并意识到它应该使用新的 URL
  5. 重新发送请求
  6. HTTP 客户端向新 URL http://www.test.com/Home/About.
  7. 发送第二个请求

第二个请求不包含对原始 url http://www.test.com/about.aspx 的任何引用。这就是为什么 您无法在服务器端获得原始 url

如果您的应用程序逻辑需要有关初始 url 的信息,我在这里看到两个选项:

  1. 您可以将原始 url 作为参数添加到重定向的 url,如下所示: http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx

    您必须使用新模板更新重定向规则,并在 ASP.Net 核心应用程序中调整路由。

  2. 您可以使用路由而不是重定向。在这种情况下,不会发生 301 重定向,服务器将处理用户输入的 url 的初始请求,但将为两个 url 调用相同的控制器操作。

选择更适合您的方法。希望这会有所帮助。