一种解决方案是添加多条路线。
routes.MapRoute(
name: "article1",
url: "article1",
defaults: new { controller = "<YourControllerName>", action = "article1" }
);
routes.MapRoute(
name: "article2",
url: "article2",
defaults: new { controller = "<YourControllerName>", action = "article2" }
);
编辑:
根据 OP 的评论,可以理解会有“n”篇文章(网址)。为了解决这个问题,我们可以创建一个自定义路由处理程序。
第 1 步:创建一个新的自定义路由处理程序,继承自 MvcRouteHandler
public class CustomRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var controller = requestContext.RouteData.Values["controller"].ToString();
requestContext.RouteData.Values["controller"] = "Home";
requestContext.RouteData.Values["action"] = "Index";
requestContext.RouteData.Values["articleId"] = controller;
return base.GetHttpHandler(requestContext);
}
}
第 2 步:注册新路线。确保在默认路由之前添加此路由。
routes.Add("Article", new Route("{controller}", new CustomRouteHandler()));
在给定的 CustomRouteHandler 类中,Controller 和 Action 分别被硬编码为“Home”和“Index”。您可以将其更改为您自己的控制器和操作名称。您还会看到 RouteData.Values 的“articleId”设置。使用该设置,您将在 Action 方法中获取 articleId 作为参数。
public ActionResult Index(string articleId)
{
return View();
}
在所有更改之后,对于 url http://www.example.com/article1, HomeController 的 Index() 方法被调用,并且 articleId 设置为“article1”。
与http://www.example.com/article2类似,Index() 方法被调用,参数 articleId 设置为“article2”。