2017-12-14 27 views
0

私はweb.configを使用して.Net Coreを使用していくつかのリダイレクションルールを設定しています。動的にrequstURIを検出+ ASP.NETコア

<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}"); 

と試みたが、その一つは、最初はURL(www.test.com/about.aspx)で入力していない、リダイレクトURI(www.test.com/Home/About)を検出

私はHomeController,IActionResultAboutの方法で次のコードを使用しています。

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

HttpRequestMessagerequestUriパラメータは、現時点では、動的ではないので、ユーザーがURLに入力したものを検出することができません。

お手数ですが、

答えて

1

のがより明確にするためのHTTPリクエストの流れを説明してみましょう:

  1. HTTPクライアント301コードで応答し、LocationヘッダにURL http://www.test.com/Home/Aboutをリダイレクトhttp://www.test.com/about.aspx
  2. あなたのリダイレクトルールのヒットとサーバーへの最初の要求を送信します。
  3. HTTPクライアントはこの応答を受信し、新しいURLで要求を再送信する必要があることを認識します。
  4. HTTPクライアントは新しいURL http://www.test.com/Home/Aboutに2番目の要求を送信します。

2番目のリクエストには元のURLへの参照が含まれていませんhttp://www.test.com/about.aspxだからあなたはサーバー側の元のURLを得る方法がありません

アプリケーションのロジックは、最初のURLに関する情報を持つ必要がある場合は、私はここでは2つのオプションを参照してください。

  1. URLをリダイレクトするためのパラメータとして、元のURLを追加することができ、このような何か: http://www.test.com/Home/About?orig_url=http://www.test.com/about.aspx

    リダイレクションルールを新しいテンプレートで更新し、ASP.Net Coreアプリケーションのルーティングを調整する必要があります。

  2. リダイレクトの代わりにルーティングを使用できます。この場合、301リダイレクトは発生しません。サーバーはユーザーが入力したURLで初期要求を処理しますが、両方のURLに対して同じControllerアクションが呼び出されます。

あなたに適したアプローチを選択してください。これが役立つことを願っています。

+0

非常にうまく説明されています。どうもありがとうございました。 – pavilion

関連する問題