ユーザーに次のようなバニティ URL を提供したいと思います。
www.foo.com/sergio
どのようなルートを作成する必要がありますか?
次のコントローラーとアクションがあるとします。バニティ URL をそのコントローラーにマップするにはどうすればよいでしょうか?
public ActionResult Profile(string username)
{
var model = LoadProfile(username);
return View(model);
}
これが私が試したことと何が起こるかです:
オプション A:
すべての URL がこのルートでキャッチされます。つまり、入力したすべての URL は、 だけではなく Account コントローラーに誘導されますfoo.com/[USERNAME]
。ダメ。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Profile",
"{username}",
new { controller = "Account", action = "Profile", username = UrlParameter.Optional }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
オプション B:
デフォルト ルートはうまく機能しますが、プロファイルfoo.com/[USERNAME]
にアクセスしようとすると HTTP 404 エラーが発生します。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"DentistProfile",
"{username}",
new { controller = "Account", action = "Profile", username = UrlParameter.Optional }
);
}