【问题标题】:How HttpContext RESPONSE END in ASP.NET CoreASP.NET Core 中的 HttpContext RESPONSE END 如何
【发布时间】:2019-04-11 03:53:48
【问题描述】:

我想使用 mvc System.Web.HttpContext.Current.Response.End(); 但在 mvc core 2 中尝试使用以下代码:

 private readonly IHttpContextAccessor _httpContextAccessor;

            public SmsService(IUnitOfWork uow ,IHttpContextAccessor httpContextAccessor) 
            {
                _uow = uow;
                _uow.CheckArgumentIsNull(nameof(_uow));
                _LockIPRequest= uow.Set<LockIPRequest>();
                this._httpContextAccessor = httpContextAccessor;
            }

      _httpContextAccessor.HttpContext.Response.WriteAsync("</body></html>");
      _httpContextAccessor.HttpContext.Response.end();

_httpContextAccessor.HttpContext.Response.end();

结束();不工作 mvc 核心不退出

【问题讨论】:

  • “它不起作用”是什么意思?那不是描述性的。你期待什么,它实际上在做什么?
  • 不要像这样使用 HttpContext 或 Response。 ASP.NET Core 不是 WebForms,WebForms 中使用的代码不需要也不会工作。此处发布的代码不会编译或显示完整的操作。你想做什么?为什么不返回一个 ActionResult?

标签: c# asp.net-mvc asp.net-core-2.0


【解决方案1】:

正如 cmets 中提到的,Response.End 在 ASP.NET Core 世界中不存在。

您应该像这样设置响应状态代码,而不是 Response.End:

 _httpContextAccessor.HttpContext.Response.StatusCode = StatusCodes.Status200OK;

这不会完全“结束”响应。中间件仍然有机会运行,但是通过设置状态码,框架可以理解已经提供了响应。但是,您将负责确保您的下游中间件不会输出其他内容以响应请求。虽然这通常不是问题。

【讨论】:

  • 如何在 .NET Core 3.1 上应用此说明?哪些文件需要修复?对不起我的英语。
  • 没有要更改的特定文件。只是在 .net core 中,包括版本 3,设置响应状态码是最接近结束请求的事情。任何响应对象都是如此,无论您如何获得对它的访问权(通过中间件、通过控制器等)希望这有助于使其更加清晰。
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2021-05-05
  • 2015-09-23
  • 2020-05-08
相关资源
最近更新 更多