基本的には次のようにしたいと思います: http://website.com/Home/About
次のように表示されます: http://website.com/About
URLに表示される「ホーム」コントローラーは、ユーザーが読むURLを長くします。
私は次のことを試みました:
routes.MapRoute(
name: "About",
url: "",
defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional }
);
誰かが私を助けてくれませんか?
このようなものを試してください:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"OnlyAction",
"{action}",
new { controller = "Home", action = "Index" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
これを試して。また、URLが小文字になります。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.LowercaseUrls = true;
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
そしてあなたのホームコントローラーで:
[Route("About")]
public ActionResult About()
{
return View();
}
ステップ1:ルート制約を作成します。
public class RootRouteConstraint<T> : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var rootMethodNames = typeof(T).GetMethods().Select(x => x.Name.ToLower());
return rootMethodNames.Contains(values["action"].ToString().ToLower());
}
}
ステップ2:
作成したルート制約を使用するデフォルトのマッピングの上に新しいルートマッピングを追加します。ジェネリックパラメーターは、「ルート」コントローラーとして使用する予定のコントローラークラスである必要があります。
routes.MapRoute(
"Root",
"{action}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional},
new {isMethodInHomeController = new RootRouteConstraint<HomeController>()});
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new
{controller = "Home", action = "Index", id = UrlParameter.Optional}
);
これで、次のようなホームコントローラーメソッドにアクセスできるようになります。example.com/ about、example.com/contact
これはHomeControllerにのみ影響します。他のすべてのコントローラーには、デフォルトのルーティング機能があります。