バックグラウンド
私HomeController.cs
が持っている:
[HttpGet]
public GetPerson(string name)
{
return View(new PersonModel { ... });
}
私Global.asax.cs
が持っている:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Word", "person/{name}",
new { controller = "Home", action = "GetPerson" });
routes.MapRoute(
"Default", "{controller}/{action}",
new { controller = "Home", action = "Index" });
}
SomePage.cshtml
私には、事実上、これがあります:
@{ var name = "Winston S. Churchill"; }
<a href="@Url.Action("GetPerson", "Home", new { name })">@name</a>
問題
Winston S. Churchill のリンクをクリックすると、URL にルーティングされhttp://localhost/person/Winston%20S.%20Churchill
、標準の 404 ページが表示されます。
HTTP エラー 404.0 - 見つかりません
お探しのリソースは削除されているか、名前が変更されているか、一時的に利用できません。
name
これは、変数に.
(ピリオド)が含まれている場合にのみ発生します。たとえば、名前がWinston Churchill
.
.
ASP.NET MVC 3で URL の (ピリオド) をパーセント エンコードするにはどうすればよいですか?
.
または、 (ピリオド) をパーセントでエンコードせずにルーティングを機能させるにはどうすればよいですか?
受け入れられない回避策 (正当な理由なしに提示された場合)
ルートを次のように変更すると、すべてが機能します。
routes.MapRoute(
"Word", "person",
new { controller = "Home", action = "GetPerson" });
ただし、URL は になりhttp://localhost/person?name=Winston%20S.%20Churchill
、これは私が望むものではありません。name
クエリではなく、URL のパス部分が必要です。