CopyPastor

Detecting plagiarism made easy.

Score: 0.8322339897125834; Reported for: String similarity Open both answers

Possible Plagiarism

Plagiarized on 2019-06-08
by Love Pandey

Original Post

Original - Posted on 2016-07-25
by Nate Barbettini



            
Present in both answers; Present only in the new answer; Present only in the old answer;

As a general rule, converting a Web Forms or `MVC5` application to `ASP.NET Core` will require a significant amount of refactoring.
`HttpContext.Current` was removed in `ASP.NET Core`. Accessing the current HTTP context from a separate class library is the type of messy architecture that `ASP.NET Core` tries to avoid. There are a few ways to re-architect this in `ASP.NET Core`.
**HttpContext property**
You can access the current HTTP context via the `HttpContext` property on any controller. The closest thing to your original code sample would be to pass `HttpContext` into the method you are calling:
public class HomeController : Controller { public IActionResult Index() { MyMethod(HttpContext); // Other code } } public void MyMethod(Microsoft.AspNetCore.Http.HttpContext context) { var host = $"{context.Request.Scheme}://{context.Request.Host}"; // Other code }
**HttpContext parameter in middleware**
If you're writing custom `middleware` for the `ASP.NET Core` pipeline, the current request's `HttpContext` is passed into your `Invoke` method automatically:
public Task Invoke(HttpContext context) { // Do something with the current HTTP context... }
**HTTP context accessor**
Finally, you can use the `IHttpContextAccessor` helper service to get the HTTP context in any class that is managed by the `ASP.NET Core` dependency injection system. This is useful when you have a common service that is used by your controllers.
Request this interface in your constructor:
public MyMiddleware(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; }
You can then access the current HTTP context in a safe way:
var context = _httpContextAccessor.HttpContext;
// Do something with the `current HTTP context`... `IHttpContextAccessor` isn't always added to the service container by default, so register it in `ConfigureServices` just to be safe:
public void ConfigureServices(IServiceCollection services) { services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); // Other code... }
As a general rule, converting a Web Forms or MVC5 application to ASP.NET Core **will require** a significant amount of refactoring.
`HttpContext.Current` was removed in ASP.NET Core. Accessing the current HTTP context from a separate class library is the type of messy architecture that ASP.NET Core tries to avoid. There are a few ways to re-architect this in ASP.NET Core.
## HttpContext property
You can access the current HTTP context via the `HttpContext` property on any controller. The closest thing to your original code sample would be to pass `HttpContext` into the method you are calling:
public class HomeController : Controller { public IActionResult Index() { MyMethod(HttpContext);
// Other code } }
public void MyMethod(Microsoft.AspNetCore.Http.HttpContext context) { var host = $"{context.Request.Scheme}://{context.Request.Host}";
// Other code }
## HttpContext parameter in middleware
If you're writing [custom middleware](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware?tabs=aspnetcore2x#writing-middleware) for the ASP.NET Core pipeline, the current request's `HttpContext` is passed into your `Invoke` method automatically:
public Task Invoke(HttpContext context) { // Do something with the current HTTP context... }
## HTTP context accessor
Finally, you can use the `IHttpContextAccessor` helper service to get the HTTP context in any class that is managed by the ASP.NET Core dependency injection system. This is useful when you have a common service that is used by your controllers.
Request this interface in your constructor:
public MyMiddleware(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; }
You can then access the current HTTP context in a safe way:
var context = _httpContextAccessor.HttpContext; // Do something with the current HTTP context...
`IHttpContextAccessor` isn't always added to the service container by default, so register it in `ConfigureServices` just to be safe:
public void ConfigureServices(IServiceCollection services) { services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
// Other code... }

        
Present in both answers; Present only in the new answer; Present only in the old answer;