質問:
基本的にはwikipedia/mediawikiのクローンであるwikiソフトウェアを作成していますが、ASP.NET MVCでは(MVCがポイントなので、ScrewTurnをお勧めしません)。
今、私は質問があります:
このルートマッピングを使用して、次のようなURLをルーティングします。
http://en.wikipedia.org/wiki/ASP.NET
routes.MapRoute(
"Wiki", // Routenname
//"{controller}/{action}/{id}", // URL mit Parametern
"wiki/{id}", // URL mit Parametern
new { controller = "Wiki", action = "dbLookup", id = UrlParameter.Optional } // Parameterstandardwerte
);
「AS/400」のようなタイトルがあるかもしれないということが今私に思い浮かびました:
http://en.wikipedia.org/wiki/AS/4
偶発的に、これもあります(タイトル 'スラッシュ'):
http://en.wikipedia.org/wiki//
そしてこれは:
http://en.wikipedia.org/wiki//dev/null
全体として、ウィキペディアには次のような興味深いタイトルのリストがあるようです。 http://en.wikipedia.org/wiki/Wikipedia:Articles_with_slashes_in_title
このルートのようなルートを正しく作成するにはどうすればよいですか?
編集:
何かのようなもの:
URLが/ Wiki /で始まり、/ wiki/Edit /で始まらない場合(ただし/ Wiki/Editではない場合)、URLの残りすべてをIDとして渡します。
編集:
うーん、もう1つの問題:これをルーティングするにはどうすればよいですか:
http://en.wikipedia.org/wiki/C&A
ウィキペディアは...
編集:
Wikipediaによると、wikitext構文との衝突のため、次の文字のみをページタイトルで使用することはできません(DISPLAYTITLEでサポートされていません)。
# < > [ ] | { }
編集:
*および&を許可するには、
<httpRuntime requestPathInvalidCharacters="" />
ファイルweb.configのセクション<system.web>へ
(ここにあります: http://www.christophercrooker.com/use-any-characters-you-want-in-your-urls-with-aspnet-4-and-iis )
キャッチオールルートを使用して、URLのwiki
部分に続くすべてをid
トークンにキャプチャできます。
routes.MapRoute(
"Wiki",
"wiki/{*id}",
new { controller = "Wiki", action = "DbLookup", id = UrlParameter.Optional }
);
次のリクエストがある場合:/wiki/AS/400
Wiki
コントローラー上の次のアクションにマップします。
public ActionResult DbLookup(string id)
{
// id will equal AS/400 here
...
}
の限り /wiki//
が心配です。このリクエストがASP.NETパイプラインに到達する前に、Webサーバーから400 Bad Requestエラーを受け取ると思います。 ブログ投稿をフォロー をチェックアウトできます。
Attribute Routing
in mvc /
in string _abc/cde
in HttpGet
で同じ問題が発生しました
[Route("verifytoken/{*token}")]
[AllowAnonymous]
[HttpGet]
public ActionResult VerifyToken(string token)
{
//logic here
}
したがって、*
を配置する必要があります。これは、この後にパラメーターと見なされるためです
@Darin:それは明らかです、質問は次のとおりです。コントローラー+アクション+ IDが指定されているため、これらすべてを再びルーティングに渡しているようです...-Quandary 11年6月13日17:38
質問-あなたの質問は1年以上前のものであるため、すでにこれを理解しているかもしれませんが、RedirectToActionを呼び出すと、実際にはHTTP 302応答を送信していますこれにより、ブラウザは指定されたアクションに対してGETリクエストを行います。したがって、あなたが見ている無限ループ。