首页 > 解决方案 > Umbraco SurfaceController - 无法获取 CurrentPage

问题描述

我有一个执行 Get 方法的 SurfaceController。当我尝试使用 this.CurrentPage 访问当前页面时,出现以下错误

在路由值中找不到 Umbraco 路由定义,请求必须在 Umbraco 请求的上下文中进行

为什么我的控制器看不到当前页面?

{ 使用系统;使用 System.Threading.Tasks;使用 System.Web.Mvc;... 使用 Umbraco.Web.Mvc;

public class BenefitStatementPdfSurfaceController : SurfaceController
{
    private readonly SelfServiceApiHttpClient _apiClient;

    public MySurfaceController(SelfServiceApiHttpClient apiClient)
    {
        _apiClient = apiClient;
    }

    [ActionName("MemberPdf")]
    [HttpGet]
    [Authorize]
    public async Task<ActionResult> MemberPdfAsync(int memberNumber, int selectedYear)
    {
        var content = await _apiClient
                                .MemberPdfAsync(memberNumber, selectedYear)
                                .ConfigureAwait(false);
        if (content.HasPdf)
        {
                return this.File(content.Pdf, "application/pdf", $"Statement{selectedYear}_{DateTime.Now:yyyyMMdd}_{DateTime.Now:HHmmss}.pdf");
        }

        var nodeId = this.CurrentPage.Id; ------ERRORS HERE
       ...
    }
}

}

标签: c#model-view-controllerumbraco

解决方案


我认为您需要使用当前的 UmbracoContext。

Umbraco 有一些你可以使用的辅助方法。

你可以试试下面的代码:

UmbracoHelper helper = new UmbracoHelper(UmbracoContext.Current);
IPublishedContent content = helper.TypedContent(Node.getCurrentNodeId());

推荐阅读