簡體   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