MVC-在控制器中传递动作的路径

时间:2018-11-09 12:45:35

标签: asp.net-mvc

对于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" }
);

1 个答案:

答案 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()方法。