繁体   English   中英

动态检测requstURI + ASP.NET Core

[英]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. 您的重定向规则命中,服务器响应301代码,并在Location标头中重定向URL http://www.test.com/Home/About
  3. HTTP客户端收到此响应,并意识到它应使用新的URL重新发送请求
  4. HTTP客户端将第二个请求发送到新URL http://www.test.com/Home/About

第二个请求不包含对原始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 : http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx : http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM