9

I want use mvc System.Web.HttpContext.Current.Response.End(); but trying in mvc core 2 with this code:

 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();

end(); doesn't work mvc core dont exits

amirnowrozian
  • 305
  • 1
  • 2
  • 10
  • 1
    What do you mean by "it doesn't work"? That is not descriptive. What are you expecting and what is it actually doing? –  Nov 07 '18 at 17:14
  • 1
    *Don't* use HttpContext or Response like this. ASP.NET Core isn't WebForms and the code used in WebForms isn't needed and won't work. The code posted here doesn't compile or show a complete action. What are you trying to do? Why not return an ActionResult? – Panagiotis Kanavos Nov 07 '18 at 17:37
  • Read this answer https://stackoverflow.com/a/40206682 – Marcus Höglund Nov 07 '18 at 17:42

2 Answers2

18

As has been mentioned in the comments, Response.End does not exist in the ASP.NET Core world.

Instead of Response.End, you should set the response status code like so:

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

This won't fully "end" the response. The middleware still gets a chance to run, but by setting the status code, the framework has a way to understand that a response has been provided. You will however be responsible for making sure that your downstream middleware does not output other content in response to the request. Although this is often not a problem.

RonC
  • 31,330
  • 19
  • 94
  • 139
  • How to apply this instructions on .NET Core 3.1? Which files need to repair? Sorry about my English. – Fairuz Sulaiman Jan 08 '20 at 03:12
  • There is no specific file to change. It’s just that in .net core, including version 3, setting the response status code is the closest thing there is to ending the request. This is true of any response object, regardless of how you obtain access to it ( via middleware, via a controller, etc) hope that helps make it more clear. – RonC Jan 08 '20 at 03:18
1

Now in August 2022, it is possible to call Response.End through the SystemWebAdapters library. I particularly recommend using it only if you are performing a large-scale migration from a .NET Framework project to .NET Core. If you are in a greenfield project, try not to use this library and write your code following the recommendations for ASP.NET Core request/response lifecycle.