对于MVC来说还很陌生,我希望我的文章页面的网址是这样的:-
http://www.example.com/article1
http://www.example.com/article2
http://www.example.com/article3
我该如何设置路由,以便每当有人在上面键入内容时,它就会在控制器中调用称为文章的操作并将其传递给路径?
我尝试了类似的方法,但无济于事:-
routes.MapRoute(
name: "article",
url: "{article}",
defaults: new { controller = "Home", action = "article" }
);
答案 0 :(得分:0)
一种解决方案是添加多个路由。
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”设置。使用该设置,您将在操作方法中将articleId作为参数。
public ActionResult Index(string articleId)
{
return View();
}
所有更改之后,对于URL http://www.example.com/article1,将在articleId设置为“ article1”的情况下调用HomeController的Index()方法。
与http://www.example.com/article2类似,在参数articleId设置为'article2'的情况下调用Index()方法。