オプションの最初のパラメーターを使用したMVCルーティング

user985287

私は次のようなルートを取得しようとしています:

{lang:optional} / {controller} / {action} / {id:optional}

この記事の「コントローラー制約」のアイデア:(コントローラー名に対するMVCルーティング制約)では、{lang}値が提示されているかどうかに関係なく、上記のルートは非常にうまく機能します。

ただし、このルートに一致させるには問題があります。

routeName: testRoute
url: {lang:optional}/list/{something:optional}
{controller = "product", action = "index"}

上記のルートでは、{lang}値を提示する必要があります。提示しないと、機能しません。

私はそれを解決するために2つの回避策があります。

最初の方法は、上記の2つのルートを設定することです。

非常に標準的なもの:

routeName: testRoute
url: /list/{something}
{controller = "product", action = "index"}

そして別の非常に標準的なもの:

routeName: testRouteLang
url: {lang:not_optional}/list/{something:optional}
{controller = "product", action = "index", lang="de"}

2つの標準ルートを1つのルートに結合する方法があるかどうか疑問に思っています。

2番目の回避策は、次のようなサブドメイン名を使用することです。

http://example.com/list (default to English)
http://de.example.com/list (de)

しかし、SEOの理由から、私はサブドメインのアイデアが本当に好きではありません(多分私はこの点で間違っています)。

私の目標は、URLのデフォルトの「en-us」を削除することです。私はこれが好き

http://www.example.com/list/something (default as English)

URLに「en-us」を強制したくない

http://www.example.com/en-us/list/something

「lang」は、現在の文化が英語でない場合にのみURLで表示する必要があります。

http://www.example.com/de
http://www.example.com/fr/list/something

ありがとう。

user985287

最後に、私は非常に簡単で乾燥した解決策を見つけました。重要なのは、HttpContext.Current.RewritePathを使用してデフォルトの「en」を挿入することですが、この「en」はURLに表示されません。

protected void Application_BeginRequest() 
{
  var rawUrl = HttpContext.Current.Request.RawUrl;
  var segments = HttpContext.Current.Request.Url.Segments;
  var segment1 = segments.Count() >= 2 ? segments[1] : string.Empty;
  if (IsSomethingThatIWantToHandle("are,you,js,script,css,jpg,png,and,so,on?")
     && !LittleHelper.DoIHaveValidLangAlready(segment1))
  {
    HttpContext.Current.RewritePath("/en" + rawUrl);
  }
}

URLを生成するときに、langがnull / emptyの場合、URLはdouble //になります。余分な「/」を削除するには、ちょっとしたヘルパーが必要です。

ルートを定義するときの秘訣は、エリア名をDataToken追加する必要があることです。そうしないと、プロジェクトにエリアが表示されている場合、ビューを正しく見つけることができません。

routes.MapRoute(
   "good name",
   "{lang}/some-cool-stuff/{id}/{slug}",
   defaults: new { area = "bigarea", controller = "bigcontroller", action = "tinyaction", 
   lang = UrlParameter.Optional, id = UrlParameter.Optional, slug = UrlParameter.Optional }
   , constraints: new { lang = new CultureConstraint() }
).DataTokens.Add("area", "bigarea");

CultureConstraintは非常に単純です。有効なカルチャ名であるかどうかを確認するだけです。名前空間の制約は必要ありません。ただし、ルートテーブルが大きくて複雑な場合は、コントローラーの制約、またはアクションの制約が非常に必要です。そうでない場合、ルートの重複が問題になります。

プロジェクトのデフォルトルートは次のとおりです。url: "{lang} / {area} / {controller} / {action} / {id} / {slug}"、

そしてそれは私が望むように美しく動作します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Http.RouteAttributeを使用したオプションのパラメーターのルーティング

分類Dev

AngularJS:オプションのパラメーターを持つURLを使用したルーティング

分類Dev

Flask - 複数のオプション パラメーターを使用したルーティング

分類Dev

オプションのパラメータを使用したRails4ルーティング?

分類Dev

オプションのパラメーターとクエリパラメーターを使用したWebApi属性ルーティング

分類Dev

?を使用したオプションパラメータを使用したルーティング および&

分類Dev

オプションのパラメータを使用したCrystalReportsのフィルタリング

分類Dev

アノテーションを使用したルーティングのグローバルパラメータ

分類Dev

オプションのパラメーターを使用した任意の順序でのVue.JSルーティング

分類Dev

オプションのパラメーター/デフォルトのパラメーター値を使用したASP.NET5MVC6ルーティング

分類Dev

Laravelのオプションのルーティングパラメーター

分類Dev

動的なオプションパラメータを使用したsymfonyルーティング

分類Dev

ASP.NET MVC5でのオプションパラメーターのルーティング

分類Dev

MVCルーティングのオプションの文字列パラメーターと醜いURL

分類Dev

MVC代替ルーティングがオプションのパラメーターで失敗する

分類Dev

MVC5ルーティングとオプションのパラメーター

分類Dev

複数のオプションパラメータルーティング

分類Dev

オプションのパラメーターを使用したdynamodbクエリフィルター

分類Dev

特殊文字と子アクションを使用したMVCルーティングパラメーター

分類Dev

MVC5属性ルーティングのオプションパラメータ「名前」とは

分類Dev

オプションパラメータを使用した関数のバインディング

分類Dev

Suaveのオプションパラメータを使用したルート

分類Dev

オプションのパラメータを使用したRewriteRule

分類Dev

ActionResult必須パラメーターでオプションのMVCルーティングパラメーター

分類Dev

Laravelルーティングでオプションのパラメーターを省略できますか?

分類Dev

多くのオプションパラメータを使用したフィルタが機能しない

分類Dev

オプションのマングースモデルプロパティをURLパラメータとして使用する

分類Dev

複数のオプションパラメータを持つ関数へのWebAPIルーティング

分類Dev

アノテーションを使用したJavaの名前付き/オプションパラメータ?

Related 関連記事

  1. 1

    Http.RouteAttributeを使用したオプションのパラメーターのルーティング

  2. 2

    AngularJS:オプションのパラメーターを持つURLを使用したルーティング

  3. 3

    Flask - 複数のオプション パラメーターを使用したルーティング

  4. 4

    オプションのパラメータを使用したRails4ルーティング?

  5. 5

    オプションのパラメーターとクエリパラメーターを使用したWebApi属性ルーティング

  6. 6

    ?を使用したオプションパラメータを使用したルーティング および&

  7. 7

    オプションのパラメータを使用したCrystalReportsのフィルタリング

  8. 8

    アノテーションを使用したルーティングのグローバルパラメータ

  9. 9

    オプションのパラメーターを使用した任意の順序でのVue.JSルーティング

  10. 10

    オプションのパラメーター/デフォルトのパラメーター値を使用したASP.NET5MVC6ルーティング

  11. 11

    Laravelのオプションのルーティングパラメーター

  12. 12

    動的なオプションパラメータを使用したsymfonyルーティング

  13. 13

    ASP.NET MVC5でのオプションパラメーターのルーティング

  14. 14

    MVCルーティングのオプションの文字列パラメーターと醜いURL

  15. 15

    MVC代替ルーティングがオプションのパラメーターで失敗する

  16. 16

    MVC5ルーティングとオプションのパラメーター

  17. 17

    複数のオプションパラメータルーティング

  18. 18

    オプションのパラメーターを使用したdynamodbクエリフィルター

  19. 19

    特殊文字と子アクションを使用したMVCルーティングパラメーター

  20. 20

    MVC5属性ルーティングのオプションパラメータ「名前」とは

  21. 21

    オプションパラメータを使用した関数のバインディング

  22. 22

    Suaveのオプションパラメータを使用したルート

  23. 23

    オプションのパラメータを使用したRewriteRule

  24. 24

    ActionResult必須パラメーターでオプションのMVCルーティングパラメーター

  25. 25

    Laravelルーティングでオプションのパラメーターを省略できますか?

  26. 26

    多くのオプションパラメータを使用したフィルタが機能しない

  27. 27

    オプションのマングースモデルプロパティをURLパラメータとして使用する

  28. 28

    複数のオプションパラメータを持つ関数へのWebAPIルーティング

  29. 29

    アノテーションを使用したJavaの名前付き/オプションパラメータ?

ホットタグ

アーカイブ