37

基本的に私はそれを次のようにしたいと思います: 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 }
            );

誰かが私を助けてくれませんか?

4

3 に答える 3

58

次のようなものを試してください。

    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
    );
于 2012-10-10T21:14:31.097 に答える
9

これを試して。また、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();
    }
于 2014-11-25T16:17:01.703 に答える
2

手順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にのみ影響します。他のすべてのコントローラーには、デフォルトのルーティング機能があります。

于 2016-01-13T21:35:39.247 に答える