0

对 MVC 来说相当新,我希望我的文章页面的 URL 是这样的:-

 http://www.example.com/article1
 http://www.example.com/article2
 http://www.example.com/article3

我如何设置路由,以便每当有人在上面输入时,它会调用控制器中名为 article 的操作并将路径传递给它?

我尝试了这样的事情但无济于事:-

routes.MapRoute(
    name: "article",
    url: "{article}",
    defaults: new { controller = "Home", action = "article" }
);
4

1 回答 1

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”设置。使用该设置,您将在 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”。

于 2018-11-09T15:05:05.677 回答