C# 动态检测requstURI+;ASP.NET内核

C# 动态检测requstURI+;ASP.NET内核,c#,url-redirection,detect,asp.net-core-1.1,request-uri,C#,Url Redirection,Detect,Asp.net Core 1.1,Request Uri,我正在使用web.config使用.Net Core设置一些重定义规则 <rule name="About Page" stopProcessing="true"> <match url="about.aspx" /> <action type="Redirect" url="/Home/About" redirectType="Permanent" /> </rule> ... 但是它检测重定向的uri(www.test

我正在使用web.config使用.Net Core设置一些重定义规则

<rule name="About Page" stopProcessing="true">
    <match url="about.aspx" />
        <action type="Redirect" url="/Home/About" redirectType="Permanent" />
</rule>
...
但是它检测重定向的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
    位于位置标题中
  • 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调用相同的控制器操作


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

    解释得很好。非常感谢你。
    using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, uri))