【问题标题】:ASP.NET MVC3 dynamic routingASP.NET MVC3 动态路由
【发布时间】:2012-04-26 12:07:00
【问题描述】:

我在任何地方都找不到这个问题的答案。

我需要创建一个表单,用户可以在其中创建帖子并将网址更改为帖子。

例如,如果默认路由是

http://www.domain.com/posts/[the-title-of-the-post]

用户可以将其更改为

http://www.domain.com/[modified-title-of-the-post].

[modified-title-of-the-post] 可以是用户想要的任何东西。 这意味着它不再与帖子的标题相关联,不仅如此,/posts/ 也消失了。

我想我还应该提到这应该是全局的,这意味着用户应该能够更改网站上其他内容的 url(如上所述),例如 /topics//blog/

任何帮助将不胜感激,

谢谢, 希瓦

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-mvc-routing custom-routes


    【解决方案1】:

    您可以在 global.asax 中创建两条路线。像这样的

    routes.MapRoute("", "posts/{url}", new { controller = "Home", action = "Posts" });
    routes.MapRoute("", "{url}", new { controller = "Home", action = "Posts" });
    

    他们都指向HomeController和动作Posts

    public ActionResult Posts(string url)
    {
    
    }
    

    要处理您应该考虑扩展 RouteBase 类的每个 url

    应该这样做

    public class CustomRouting : RouteBase
    {
      public override RouteData GetRouteData(HttpContextBase httpContext)
      {
        RouteData result = null;
        string requestUrl = httpContext.Request.AppRelativeCurrentExecutionFilePath;
    
        //Handle the request
        //Compile the RouteData with your data
        result = new RouteData(this, new MvcRouteHandler());
        result.Values.Add("controller", "MyController");
        result.Values.Add("action", "MyAction");
        result.Values.Add("id", MyId);
        }
      }
      return result;
    }
    
    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
      //I only need to handle outbound so here is ok
      return null;
    }
    

    }

    在您的 global.asax 中注册您的自定义路由处理程序

    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
      routes.Add(new CustomRouting());
    
      routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    }
    

    【讨论】:

    • 我想我还应该提到这应该是全局的,这意味着用户应该能够更改 /topics/ 或 /blog/ 等网站上其他内容的 url(如上所述)
    • 好吧,您可能应该实现自己的路由处理,可能基于数据库表。看看实现 RouteBase 类。
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多