我正在创建一个 Umbraco 10 站点并尝试为 RenderController 添加路由。但是当我尝试路由的 URL 时,我不断收到 404,页面未找到错误。
在 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,这或多或少是你所拥有的。
我会在索引(默认)页面上使用它,然后为 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 端点 应该去的地方。您可能需要重新调整订单才能正常工作。