C# Umbraco SurfaceController-无法获取当前页面

C# Umbraco SurfaceController-无法获取当前页面,c#,model-view-controller,umbraco,C#,Model View Controller,Umbraco,我有一个执行Get方法的SurfaceController。当我尝试使用this.CurrentPage访问当前页面时,出现以下错误 在路线值中找不到Umbraco路线定义 请求必须在Umbraco请求的上下文中提出 为什么我的控制器无法看到当前页面 { 使用制度; 使用System.Threading.Tasks; 使用System.Web.Mvc; ... 使用Umbraco.Web.Mvc public class BenefitStatementPdfSurfaceController

我有一个执行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
       ...
    }
}
public class BenefitStatementPdfSurfaceController:SurfaceController
{
私有只读SelfServiceApiHttpClient_apiClient;
public MySurfaceController(SelfServiceApiHttpClient-apiClient)
{
_apiClient=apiClient;
}
[ActionName(“MemberPdf”)]
[HttpGet]
[授权]
公共异步任务成员PdfAsync(int memberNumber,int selectedYear)
{
var content=wait\u apiClient
.MemberPdfAsync(memberNumber,selectedYear)
.配置等待(错误);
如果(content.pdf)
{
返回此.File(content.Pdf,“application/Pdf”,$“语句{selectedYear}{DateTime.Now:yyyyMMdd}{DateTime.Now:HHmmss}.Pdf”);
}
var nodeId=this.CurrentPage.Id;------这里的错误
...
}
}

}

我认为您需要使用当前上下文

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

您可以尝试以下代码:

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

删除
.ConfigureAwait(false)
是否会改变任何东西?不,仍然是相同的错误嘿,如果我在曲面控制器中是正确的,默认情况下您不在Umbraco上下文中,但是曲面控制器提供了一个Umbraco帮助器。我最近做过类似的事情,我所做的是传递页面的id(这是对我的ajax调用),然后使用Umbraco.TypedContent(pageId)。这将为您提供当前页面,您可以从那里访问当前页面属性。”在本例中,Umbraco'是Umbraco助手。那有用吗?另外,我认为您也可以使用'AssignedContentItem'来获取页面的属性,除非它是嵌套内容。