ASP.NET MVC3动态路由

ASP.NET MVC3动态路由,asp.net,asp.net-mvc-3,asp.net-mvc-routing,custom-routes,Asp.net,Asp.net Mvc 3,Asp.net Mvc Routing,Custom Routes,我在任何地方都找不到这个问题的答案 我需要创建一个表单,用户可以在其中创建一篇文章,并更改该文章的url 例如,如果默认路由为 http://www.domain.com/posts/[the-title-of-the-post] 用户可以将此更改为 http://www.domain.com/[modified-title-of-the-post]. [修改后的帖子标题]可以是用户想要制作的任何内容。 这意味着它不再与文章标题挂钩,不仅如此,/posts/也不见了 我想我还应该提到,这应该

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

我需要创建一个表单,用户可以在其中创建一篇文章,并更改该文章的url

例如,如果默认路由为

http://www.domain.com/posts/[the-title-of-the-post]
用户可以将此更改为

http://www.domain.com/[modified-title-of-the-post].
[修改后的帖子标题]
可以是用户想要制作的任何内容。 这意味着它不再与文章标题挂钩,不仅如此,
/posts/
也不见了


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

任何帮助都将不胜感激

谢谢,
Hiva

您可以在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)
{

}
< P>处理您应该考虑的每个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 });
}

我想我还应该提到,这应该是全局的,这意味着用户应该能够更改网站上其他内容的url(如上所述),例如,/topics/或/blog/那么,您可能应该实现自己的路由处理,可能基于数据库表。查看如何实现RouteBase类。