繁体   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