感嘆符でURLを書き換えるときにコントローラーが見つかりません
-
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]+]")
所属していません StackOverflow