【问题标题】:Detect requstURI dynamically + ASP.NET Core动态检测requstURI + ASP.NET Core
【发布时间】:2017-12-14 17:58:40
【问题描述】:

我正在使用 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)

我在HomeControllerIActionResultAbout方法中使用下面的代码。

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

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

感谢您的帮助。

【问题讨论】:

    标签: c# url-redirection detect asp.net-core-1.1 request-uri


    【解决方案1】:

    为了更清楚,让我们描述一下 HTTP 请求的流程:

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

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

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

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

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

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

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

    【讨论】:

    • 解释得很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2017-12-01
    • 2016-11-12
    • 2019-12-26
    • 2017-09-24
    • 2018-06-23
    相关资源
    最近更新 更多