'IApplicationBuilder' 不包含 'HttpContext' 的定义
'IApplicationBuilder' does not contain a definition for 'HttpContext'
我正在尝试使用此示例代码 from Microsoft docs:
在我的 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' does not contain a definition for 'HttpContext'
and no accessible extension method 'HttpContext' accepting a first
argument of type 'IApplicationBuilder' could be found (are you missing
a using directive or an assembly reference?)
我看到 context
是 Microsoft.AspNetCore.Diagnostics.StatusCodeContext which has a HttpContext property 类型。 为什么不识别 HttpContext?
P.S。我尝试安装这些 NuGet 包无济于事:
Microsoft.AspNetCore.Diagnostics
Microsoft.AspNetCore.Diagnostics.Abstractions
Microsoft.AspNetCore.Http
Microsoft.AspNetCore.Http.Abstractions
Microsoft.AspNetCore.Http.Extensions
Microsoft.AspNetCore.Http.Features
您需要从 lambda 表达式中 return Task
编译器才能识别正确的重载。
您正在尝试使用此重载:
UseStatusCodePages(IApplicationBuilder, Func<StatusCodeContext,Task>)
但是由于您的 lambda 表达式没有 return 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);
});
发现问题...有点奇怪:当我在 HttpContext
的第一个实例上检查 Intellisense 时,它没有为 using
语句提供任何建议,但是当我这样做时在任何其他情况下,它建议添加对 Microsoft.AspNetCore.Http
的引用,从而修复它。
我不确定为什么当我检查第一个 HttpContext
时没有发现该建议。
您缺少一些 using 语句。有时 IntelliSense 并不能完全了解您想去的地方(声明可能含糊不清)。您可以更具体并像这样编码:
async (StatusCodeContext ctx) => ...
在你的情况下,IntelliSense 很可能会建议一些你需要的 using 语句,之后你可以替换为:
async ctx => ...
再次,它应该可以工作。
我正在尝试使用此示例代码 from Microsoft docs:
在我的 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' does not contain a definition for 'HttpContext' and no accessible extension method 'HttpContext' accepting a first argument of type 'IApplicationBuilder' could be found (are you missing a using directive or an assembly reference?)
我看到 context
是 Microsoft.AspNetCore.Diagnostics.StatusCodeContext which has a HttpContext property 类型。 为什么不识别 HttpContext?
P.S。我尝试安装这些 NuGet 包无济于事:
Microsoft.AspNetCore.Diagnostics
Microsoft.AspNetCore.Diagnostics.Abstractions
Microsoft.AspNetCore.Http
Microsoft.AspNetCore.Http.Abstractions
Microsoft.AspNetCore.Http.Extensions
Microsoft.AspNetCore.Http.Features
您需要从 lambda 表达式中 return Task
编译器才能识别正确的重载。
您正在尝试使用此重载:
UseStatusCodePages(IApplicationBuilder, Func<StatusCodeContext,Task>)
但是由于您的 lambda 表达式没有 return 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);
});
发现问题...有点奇怪:当我在 HttpContext
的第一个实例上检查 Intellisense 时,它没有为 using
语句提供任何建议,但是当我这样做时在任何其他情况下,它建议添加对 Microsoft.AspNetCore.Http
的引用,从而修复它。
我不确定为什么当我检查第一个 HttpContext
时没有发现该建议。
您缺少一些 using 语句。有时 IntelliSense 并不能完全了解您想去的地方(声明可能含糊不清)。您可以更具体并像这样编码:
async (StatusCodeContext ctx) => ...
在你的情况下,IntelliSense 很可能会建议一些你需要的 using 语句,之后你可以替换为:
async ctx => ...
再次,它应该可以工作。