元のURLを取得し、クエリ文字列パラメーターを切り捨てて、URLのクリーンアップバージョンを返します。アプリケーション全体で発生させたいので、global.asaxを介して実行するのが理想的です。また、301リダイレクトも適切だと思います。
すなわち。
in:www.website.com/default.aspx?utm_source=Twitter&utm_medium=social-media
out:www.website.com/default.aspx
これを達成する最良の方法は何でしょうか?
System.Uriはあなたの友達です。これには多くの有用なユーティリティがありますが、必要なものはGetLeftPartです。
string url = "http://www.website.com/default.aspx?utm_source=Twitter&utm_medium=social-media";
Uri uri = new Uri(url);
Console.WriteLine(uri.GetLeftPart(UriPartial.Path));
これにより、出力が得られます。 http://www.website.com/default.aspx
[Uriクラスでは、プロトコルhttp://を指定する必要があります]
GetLeftPart Basicsは、「uriの左側の部分を指定した部分まで取得する」と言います。これには、Scheme(http://ビットのみ)、Authority(www.website.com部分)、Path(/default.aspx)、またはQuery(クエリ文字列)を使用できます。
Aspx Webページを使用している場合、Response.Redirect(newUrl)を使用して呼び出し元をリダイレクトできます。
役立つことを願っています
ここに簡単なトリックがあります
Dim uri = New Uri(Request.Url.AbsoluteUri)
dim reqURL = uri.GetLeftPart(UriPartial.Path)
完全なパスとクエリを使用せずにルートパスを取得する簡単な方法を次に示します。
string path = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery,"");
これは少し良く見えるかもしれません。
string rawUrl = String.Concat(this.GetApplicationUrl(), Request.RawUrl);
if (rawUrl.Contains("/post/"))
{
bool hasQueryStrings = Request.QueryString.Keys.Count > 1;
if (hasQueryStrings)
{
Uri uri = new Uri(rawUrl);
rawUrl = uri.GetLeftPart(UriPartial.Path);
HtmlLink canonical = new HtmlLink();
canonical.Href = rawUrl;
canonical.Attributes["rel"] = "canonical";
Page.Header.Controls.Add(canonical);
}
}
アプリケーションURLを適切に取得する関数が続きます。
完全に動作します。
UriBuilderクラスを見てください。 URL文字列で作成できます。オブジェクトはこのURLを解析し、必要な要素だけにアクセスできます。
ユーザーに見栄えの良いURLを見せたいので、これをやりたいと思っています。クライアントにアドレスバーのURLを「変更」させる唯一の方法は、クライアントを新しい場所に送信することです。つまり、リダイレクトする必要があります。
クエリ文字列パラメーターはページの出力に影響しますか?その場合、リクエスト(セッション変数、Cookieなど)間の状態を維持する方法を検討する必要があります。クエリ文字列パラメーターは、それらがないとページにリダイレクトするとすぐに失われるためです。
これをグローバルに(優先順に)行う方法はいくつかあります。
IHttpModule
は、ニースで再利用可能なロールユア独自のアプローチです。global.asax
でこれを行うこともできますリソースが実際に永久に移動した場合にのみ、301
応答コードを使用する必要があります。繰り返しますが、これは、アプリケーションでクエリ文字列パラメーターを使用する必要があるかどうかによって異なります。パーマネントリダイレクトを使用する場合、ブラウザ(301
応答コードを尊重する)は、.../default.aspx?utm_source = Twitter&utm_medium = social-mediaのようなURLの読み込みをスキップしますおよびload.../default.aspx-クエリ文字列パラメーターについても知ることはありません。
最後に、POST
メソッドリクエストを使用できます。これにより、クリーンなURLが得られ、パラメーターを渡すことができますが、<form>
要素またはJavaScriptを使用して作成したリクエストでのみ機能します。