Server.MapPath Equivalent in ASP.NET Core 2
In traditional asp.net applications, Server.MapPath is commonly used to generate absolute path in the web server. However, this has been removed from ASP.NET Core. So what is the equivalent way of doing it?
In ASP.NET Core, all the severable resources are located in wwwroot folder and the whole site is actually an ‘Console’ application. To access that folder, we can use IHostingEnvironment.WebRootPath property.
IHostingEnvironment is injected and can be consumed in any controller or services.
private readonly IHostingEnvironment environment;
this.environment = environment;
And then in your code, you can reference
var blogImageFolder = Path.Combine(environment.WebRootPath, imageFolder, blog.UniqueName);
The path information can then be used to manipulate I/O operations and etc..
How to Generate Absolute Url in non-MVC context
In your middleware or other scenarios, you may not have access to UrlHelper as you can do in MVC controller or views. Under this situation, you can still build absolute URL with HttpContext.
* In Middleware, you can inject HttpContext instance.
var imageVirtualPath = Path.Combine(imageFolder, blog.UniqueName, fileName);
var request = HttpContext.Request;
var uriBuilder = new UriBuilder
Host = request.Host.Host,
Scheme = request.Scheme,
Path = imageVirtualPath
uriBuilder.Port = request.Host.Port.Value;
var url = uriBuilder.ToString();