我无法在任何地方找到这个问题的答案。
我需要创建一个表单,用户可以在其中创建帖子并将网址更改为帖子。
例如,如果默认路由是
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/
也已消失。
我想我还应该提一下,这应该是全局的,这意味着用户应该可以更改网站上其他内容的网址(如上所述),例如/topics/
或/blog/
< / p>
非常感谢任何帮助,
谢谢, Hiva的
答案 0 :(得分:2)
您可以在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类
的每个网址应该做的事情
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 });
}