感嘆符でURLを書き換えるときにコントローラーが見つかりません

StackOverflow https://stackoverflow.com/questions/4361902

  •  08-10-2019
  •  | 
  •  

質問

モノレールでは、記事の投稿に友好的なURLを提供するために、URL書き換えルールを作成しようとしています。これがURLがどのように見えるかです:

http://domain.com/2010/11/29/winter-snow-warning

そして、これがURLを書き直すためのGlobal.asax.csのコードです。

RoutingModuleEx.Engine.Add(
                new PatternRoute("/<year>/<month>/<day>/<title>")
                    .DefaultForController().Is("post")
                    .DefaultForAction().Is("show")
                    .Restrict("year").ValidInteger
                    .Restrict("month").ValidInteger
                    .Restrict("day").ValidInteger
            );

ただし、URLに感嘆符がある場合は、これはうまく機能します。

http://domain.com/2010/11/29/winter-snow-warning!!

その後、コントローラーの「2010」が見つからないと言って、書き換えのルールとエラーと一致しません。ここで何が欠けているのか、これはモノレールのバグですか?

役に立ちましたか?

解決

おそらく、モノレールのルーティングのデフォルトのマッチングメカニズムは感嘆符を受け入れないため、ルートは一致せず、デフォルトは /controller/action 代わりにルールが一致し、2010年のコントローラーが存在するため失敗します。

簡単な回避策は、あなたのニーズに合った正確な表現にタイトルを制限することです。例えば: .Restring("title").ValidRegex("[-_.+!*'() a-zA-Z0-9]+]")

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top