Is there any easy (built in) way in an asp.net mvc view to get the absolute path of a file in the content folder?
At the moment I\'m using
@Url.Cont
This works for me:
A helper:
using System;
using System.Web;
using System.Web.Mvc;
public static class UrlExtensions
{
public static string Content(this UrlHelper urlHelper, string contentPath, bool toAbsolute = false)
{
var path = urlHelper.Content(contentPath);
var url = new Uri(HttpContext.Current.Request.Url, path);
return toAbsolute ? url.AbsoluteUri : path;
}
}
Usage in cshtml:
@Url.Content("~/Scripts/flot/jquery.flot.menuBar.js", true)
// example output:
// http://example.com/directory/Scripts/flot/jquery.flot.menuBar.js
HttpContext.Current.Server.MapPath("~/Content/images/logo.png");
This will generate an absolute url to an image (or file)
Request.Url.Scheme + "://" + Request.Url.Authority + Url.Content("~/Content/images/logo.png")
This works in Asp.net Core
Context.Request.Scheme + "://" + Context.Request.Host + Url.Content("~/images/logo.png")
Url.Content does return the absolute path. What you want is the domain (and port). You can get the current domain by using:
Request.Url.Authority
Then combine this string with the absolute path string of your image. It will return the domain name and if you are on a different port will also include the port number.
new Uri(Request.Url, Url.Content("~/Content/images/logo.png"))
this calls the .ToString() of Uri. You can also put Uri in a variable and call .AbsoluteUri.