2

次のようなリンクがあります。

https://myhost.com/Forums/Category/
https://myhost.com/Forums/SubCategory/
https://myhost.com/Forums/SubSubCategory/

現在、このルート構成は上記のルートをキャッチしています:

context.MapRoute(
    "Forums_category",
    "Forums/{category}",
    new { controller = "Forums", action = "ThreadList" }
);

これは私が使いたいものです:

https://myhost.com/Forums/Category/SubCategory/SubSubCategory

そして、私はそれが次のようにキャッチされることを望みます:

context.MapRoute(
    "Forums_category",
    "Forums/{THIS_IS_IGNORED}/{category}",
    new { controller = "Forums", action = "ThreadList" }
);

したがって、基本的には、リンクの最後の変数のみをキャッチしたいと考えています。それは可能ですか?

4

1 に答える 1

3

ワイルドカード (別名「すべてをキャッチ」) パラメーターを使用します (先頭に*文字が付きます):

context.MapRoute(
    "Forums_category",
    "Forums/{*category}",
    new { controller = "Forums", action = "ThreadList" }
);

これにより、スラッシュを含む残りのすべてのパス セグメントが に格納されcategoryます。

最後のセグメントのみに関心がある場合は、最後のスラッシュ文字を検索し、見つかった場合は前の部分を削除できます。おそらく末尾のスラッシュを考慮したくないので、最初に削除してください。

次のようなものが機能します。

category = category.TrimEnd('/');

int lastSlash = category.LastIndexOf('/');
if (lastSlash >= 0)
{
    category = category.Substring(lastSlash + 1);
}
于 2013-04-22T19:50:49.483 に答える