0

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

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

例如,如果默认路由是

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/

任何帮助将不胜感激,

谢谢, 希瓦

4

1 回答 1

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类的每个 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 });
}
于 2012-04-14T09:27:21.597 回答