MVC - прохождение пути к действию в контроллере - PullRequest
0 голосов
/ 09 ноября 2018

Совершенно новичок в 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" }
);

1 Ответ

0 голосов
/ 09 ноября 2018

Одним из решений является добавление нескольких маршрутов.

routes.MapRoute(
    name: "article1",
    url: "article1",
    defaults: new { controller = "<YourControllerName>", action = "article1" }
);

routes.MapRoute(
    name: "article2",
    url: "article2",
    defaults: new { controller = "<YourControllerName>", action = "article2" }
);

Edit:

Из комментария ОП понимается, что будет 'n' количество статей (URL). Чтобы справиться с этим, мы можем создать собственный обработчик маршрута.

Шаг 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» соответственно. Вы можете изменить это на свой собственный контроллер и имя действия. Также вы увидите параметр articleId для RouteData.Values. С этим параметром вы получите articleId в качестве параметра в вашем методе Action.

public ActionResult Index(string articleId)
{
    return View();
}

После всех изменений для URL http://www.example.com/article1, метод Index () HomeController вызывается со значением articleId, установленным в «article1».

Аналогично для http://www.example.com/article2, метод Index () вызывается с параметром articleId, установленным в «article2».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...