修改路由aspmvc

Modifying the routing asp mvc

在我的 ASP MVC 应用程序中,我需要像这样显示 URL 路径:

domain.com/viewName

我的路由配置如下:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.RouteExistingFiles = false;
        routes.IgnoreRoute("{*allfiles}", new { allfiles = @".*\.(css|js|gif|jpg|png)" });            

        routes.MapRoute(
           "Theme",
           "theme/{theme}/{page}",
           new { controller = "Theme", action = "Index", page = UrlParameter.Optional },
           new[] { "Tenant.Controllers" }
        );

        routes.MapRoute(
           "ThemeSlider",
           "theme/slider/{id}",
           new { controller = "Theme", action = "Slider" },
           new[] { "Tenant.Controllers" }
        );

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new[] { "Tenant.Controllers" }
        );

        routes.MapRoute(
            "Default_tenant",
            "{page}",
            new { controller = "Home", action = "Index", page = UrlParameter.Optional },
            new[] { "Tenant.Controllers" }
        );

        routes.MapMvcAttributeRoutes();
    }

但它不起作用,我必须按以下方式指定页面参数:domain.com/?page=viewName。留下以下路线的路线配置应该如何:

domain.com.co/controller/action/ domain.com.co/view

有什么建议吗??提前致谢

你的意思是摆脱控制器?这种事情是可行的,但要注意不同控制器中路由之间的冲突:

routes.MapRoute(
    name: "HomeRoute",
    url: "{action}",
    defaults: new {controller = "Home", action = "Index"},
    constraints: new { homeControllerConstraint = new HomeControllerConstraint() }
);

现在家庭控制器中的每个操作都映射到域。com/Action 而不是域。com/Home/Action。

例如,这里有一些反射代码可以有效地判断路由是否在家庭控制器中。

internal class HomeControllerConstraint : IRouteConstraint
{
    private static readonly Lazy<HashSet<string>> homeMethods = new Lazy<HashSet<string>>(CreateHomeMethods);

    private static HashSet<string> CreateHomeMethods()
    {
        return typeof(HomeController).GetMethods().Select(e => e.Name.ToLower()).ToSet();
    }

    public static bool Exists(string name)
    {
        return homeMethods.Value.Contains(name.Trim().ToLower());
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return homeMethods.Value.Contains(values["action"].ToString().ToLower());
    }
}