Asp.Net MVCルーティング-URL全体を照合するにはどうすればよいですか?
-
06-07-2019 - |
質問
アフィリエイト文字列がURLにある場合に追跡するキャッチオールルートを作成しようとしています。アフィリエイトコードは、 x
に続いて int
でマークされ、URLの最後(クエリ文字列の前)にのみ表示されます。
アイデアは、アフィリエイトIDを抽出し、ログを記録してから、アフィリエイトIDなしで同じリクエストに301を実行するというものです。
例:
http://www.domain.com/x32
http://www.domain.com/x32/
http://www.domain.com/path/to/something/x32
http://www.domain.com/x32?query=string
http://www.domain.com/x32/?query=string
http://www.domain.com/path/to/something/x32?query=string
http://www.domain.com/path/to/something/x32/?query=string
このルートを持っています
routes.Add(new Route("{url}/x{affiliateExternalId}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(
new { controller = "Home", action = "LogCookieAndRedirect" }
),
Constraints = new RouteValueDictionary(new { affiliateExternalId = @"\d{1,6}" })
});
一致するもののみ
http://www.domain.com/path/x32
http://www.domain.com/path/x32/
すべてを照合し、クエリ文字列をコントローラーに渡すにはどうすればよいですか?使用する必要があると思われる *
演算子がありますが、必要な処理を実行できません。
解決
{* url}
は、1つのセグメントだけでなくパス全体に一致します。ただし、パス全体に一致するため、最後にアフィリエイトIDに一致することはできません。ルートはすべてのリクエストに一致します。ルート制約を追加して、 url
の末尾にアフィリエイトIDがあることを確認することで、これを回避できます。
routes.MapRoute(
"WithAffiliate",
"{*url}",
new { controller="Home", action="LogCookieAndRedirect" },
new { url = @"/x[0-9]+routes.MapRoute(
"WithAffiliate",
"x{affiliateExternalId}/{*url}",
new { controller="Home", action="LogCookieAndRedirect" }
);
quot; }
);
アクションは、 url
パラメータ自体からアフィリエイトIDを解析する必要があります。 URL構造を変更するオプションがある場合、パスの先頭にあるIDに一致する可能性があります。
他のヒント
これを実行していた場合、クエリ文字列の値の1つにします。
例:
http//www.domain.com/path/to/something?affiliate=X32&query=string
問題は、アフィリエイトIDがオプションであることです。パスに配置すると、アフィリエイトIDが存在するかどうかに基づいてパスの構造が変更されるため、すべてのルートを2回実行する必要があります(アフィリエイトIDを使用して1回、なしで1回)。 。
所属していません StackOverflow