MVC 自定义 URL 路由

MVC custom URL routing

我的路由配置如下

routes.MapRoute(
                name: "Default",
                url: "TEST/{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

重定向到相应的控制器和操作时工作正常。

我想在 TEST 上添加另一个重定向,这样如果有人使用 www.mysite.com/TEST,它应该重定向 www.mysite.com/Test/Home 而不是给出 403- Forbidden : 访问被拒绝错误。

我正在这样尝试,但无法实现。

 routes.MapRoute(
                name: "AnotherDefault",
                url: "TEST",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

基本上,我要做的是从 www.mysite.com 或 www.mysite.com/TEST 重定向到 www.mysite.com/TEST/主页

更令人困惑的是,我的应用程序根目录中还有一个物理文件夹 TEST。只是想知道在其中保留另一个 web.config 是否可以解决问题?我试过了,但没有成功

请告知我在这里遗漏了什么。谢谢

经过一些实验,我发现物理文件夹 TEST 导致重定向规则失败。我在 URL 中将我的路由更改为 TEST1 而不是 TEST,它起作用了。但是,我无法重命名 TEST 文件夹。请指教

继续使用第一条路线:

routes.MapRoute(
                name: "Default",
                url: "TEST/{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

并将此添加到您的 Web.config:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"></modules>
  <handlers>
    <remove name="UrlRoutingHandler"/>
  </handlers>
</system.webServer>

请将路由配置上方的 属性 RouteExistingFiles 设置为 true

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.RouteExistingFiles = true;

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "TEST/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }

这应该允许您将文件夹名称和路由名称保留为 "TEST"。让我知道你的结果如何

We Can manage url routing by validate from database.
    public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 // here i pass my parameter like  wwww.abc.com/country-state-city 

        routes.MapLocalizedRoute("SeoFriendlyUrl",
        "{SeoFriendlyName}",
        new { controller = "Company", action = "Index" },
        new[] { "MigrationTest.Controllers" });
      // it is default 
        routes.MapRoute( name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

}

public static class LocalizedRouteExtensionMethod
{
    public static Route MapLocalizedRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces)
    {
        return MapLocalizedRoute(routes, name, url, defaults, null /* constraints */, namespaces);
    }
    public static Route MapLocalizedRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces)
    {
        if (routes == null)
        {
            throw new ArgumentNullException("routes");
        }
        if (url == null)
        {
            throw new ArgumentNullException("url");
        }

        var route = new clsRouteData(url, new MvcRouteHandler())
        {
            Defaults = new RouteValueDictionary(defaults),
            Constraints = new RouteValueDictionary(constraints),
            DataTokens = new RouteValueDictionary()
        };

        if ((namespaces != null) && (namespaces.Length > 0))
        {
            route.DataTokens["Namespaces"] = namespaces;
        }

        routes.Add(name, route);

        return route;
    }
}
public class clsRouteData : Route
{
    public clsRouteData(string url, IRouteHandler routeHandler)
        : base(url, routeHandler)
    {
    }
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        RouteData data = base.GetRouteData(httpContext);
        if (data != null)
        {
            var SeoFriendliyName = data.Values["SeoFriendlyName"] as string;

        if (SeoFriendliyName=="india-raj-jaipur")
            {
            data.Values["controller"] = "City";
            data.Values["action"] = "Index";
            // Can be send parameter
            //data.Values["Id"] = Resutls.Id;
            }

        }
  else
 {

data.Values["controller"] = "Norecord";
            data.Values["action"] = "Index";
            // Can be send parameter
            //data.Values["Id"] = Resutls.Id;
}
        return data;
    }

}