簡體   English   中英

“IApplicationBuilder”不包含“HttpContext”的定義

[英]'IApplicationBuilder' does not contain a definition for 'HttpContext'

我正在嘗試使用Microsoft 文檔中的此示例代碼在我的 ASP.NET Core 2.2 MVC 應用程序的中間件中配置某些 HTTP 響應狀態代碼的處理:

app.UseStatusCodePages(async context =>
{
    context.HttpContext.Response.ContentType = "text/plain";

    await context.HttpContext.Response.WriteAsync(
        "Status code page, status code: " + 
        context.HttpContext.Response.StatusCode);
});

但它顯示HttpContext的錯誤說

“IApplicationBuilder”不包含“HttpContext”的定義,並且找不到接受“IApplicationBuilder”類型的第一個參數的可訪問擴展方法“HttpContext”(您是否缺少 using 指令或程序集引用?)

我看到contextMicrosoft.AspNetCore.Diagnostics.StatusCodeContext類型,它具有HttpContext 屬性 為什么它不識別 HttpContext?

PS我嘗試安裝這些NuGet包無濟於事:

Microsoft.AspNetCore.Diagnostics
Microsoft.AspNetCore.Diagnostics.Abstractions
Microsoft.AspNetCore.Http
Microsoft.AspNetCore.Http.Abstractions
Microsoft.AspNetCore.Http.Extensions
Microsoft.AspNetCore.Http.Features

發現了這個問題……有點奇怪:當我在HttpContext的第一個實例上檢查 Intellisense 時,它​​沒有提供任何using語句的建議,但是當我在任何其他實例上執行它時,它建議添加對Microsoft.AspNetCore.Http的引用Microsoft.AspNetCore.Http ,修復它。

我不確定為什么當我檢查第一個HttpContext時沒有發現該提示。

您需要從 lambda 表達式返回一個Task以便編譯器識別正確的重載。

您正在嘗試使用此重載:

UseStatusCodePages(IApplicationBuilder, Func<StatusCodeContext,Task>)

但是由於您的 lambda 表達式不返回Task ,編譯器正在使用此重載:

UseStatusCodePages(IApplicationBuilder, Action<IApplicationBuilder>)

因此,您的context變量實際上是指IApplicationBuilder的實例,而不是StatusCodeContext

WriteAsync返回Task應該可以解決問題:

app.UseStatusCodePages(context =>
{
    context.HttpContext.Response.ContentType = "text/plain";

    return context.HttpContext.Response.WriteAsync(
        "Status code page, status code: " + 
        context.HttpContext.Response.StatusCode);
});

您缺少一些 using 語句。 有時 IntelliSense 並不能完全了解您想去的地方(聲明可能含糊不清)。 您可以更具體並像這樣編碼:

async (StatusCodeContext ctx) => ...

在您的情況下,最有可能讓 IntelliSense 建議您需要的一些 using 語句,之后您可以替換為:

async ctx => ...

再次,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM