Я создаю сайт Umbraco 10 и пытаюсь добавить маршрутизацию для RenderController. Но я продолжаю получать ошибку 404, страница не найдена, когда я пробую URL-адрес маршрута.
Внутри startup.cs у меня есть следующий код:
.WithEndpoints(u =>
{
u.EndpointRouteBuilder.MapControllerRoute(
name: "Article-List",
pattern: "/NewsArticle/Show/{category}",
new { Controller = "NewsArticle", Action = "Show"}
);
// Normal Umbraco endpoints
});
и контроллер рендеринга имеет следующий код:
public class NewsArticleController : RenderController
{
private readonly IUmbracoContextAccessor _umbracoContextAccessor;
private readonly UmbracoHelper _umbracoHelper;
public NewsArticleController(ILogger<RenderController> logger, ICompositeViewEngine compositeViewEngine, IUmbracoContextAccessor umbracoContextAccessor, UmbracoHelper umbracoHelper)
: base(logger, compositeViewEngine, umbracoContextAccessor)
{
_umbracoContextAccessor = umbracoContextAccessor;
_umbracoHelper = umbracoHelper;
}
[HttpGet]
[Route("/NewsArticle/Show/{category}")]
public IActionResult Show(String category)
{
return Content("Hello world - looking for" + category);
}
}
Попытка использовать этот URL-адрес https://localhost:44381/NewsArticle/Show/financials приводит к ошибке 404: страница не найдена.
PS. Я использую сообщество Visual Studio 2022.





Я не совсем уверен, чего вы пытаетесь достичь: пользовательский контроллер (вне конвейера и маршрутизации Umbraco) или стандартный контроллер представления (внутри конвейера и маршрутизации Umbraco). Говоря о контроллерах внутри пайплайна Umbraco, есть несколько вариантов: рендер, поверхность, API, угнанный. Вариант рендеринга предназначен для возврата простых старых представлений, которые выглядят так, как вы хотите.
Для стандартных контроллеров
См.: https://docs.umbraco.com/umbraco-cms/v/10.latest-lts/implementation/default-routing/controller-selection (Действие контроллера по умолчанию).
Маршрутизация должна быть примерно такой: https://localhost:44381/NewsArticle/ или https://localhost:44381/NewsArticle/index для страницы по умолчанию, которая более или менее соответствует вашей.
Я бы сделал это для страницы Index (по умолчанию), а затем добавил бы дополнительную конечную точку для Show: https://localhost:44381/NewsArticle/Show. Примечание. Я бы не ожидал, что для этого придется использовать атрибут [Route()].
Для более сложных контроллеров
Использование WithEndpoints и в startup.cs указывает мне, что вам может понадобиться пользовательская маршрутизация.
Если вам нужна пользовательская маршрутизация или что-то еще за пределами Umbraco, см. https://docs.umbraco.com/umbraco-cms/v/10.latest-lts/reference/routing/custom-routes.
Обратите внимание, что ваш пример не совсем совпадает с кодом в https://docs.umbraco.com/umbraco-cms/v/10.latest-lts/reference/routing/custom-routes#where-to -put-your-routing-logic с точки зрения того, куда должны идти конечные точки // Normal Umbraco. Возможно, вам придется изменить заказ, чтобы он заработал.
Энтони, спасибо. Я просто собирался отметить это как решенное. Я нашел ссылку, которой вы поделились, и это помогло. (Я использовал решение «IVirtualPageController» в качестве руководства. docs.umbraco.com/umbraco-cms/reference/routing/…) Мне нужно было изменить мой контроллер, чтобы он унаследовал от UmbracoPageController и IVirtualPageController. затем добавьте в мой класс метод FindContent().