mosquito87
mosquito87

Reputation: 4440

Get absolute path of file on content

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.Content("~/Content/images/logo.png")

But the path returned isn't absolute.

I know it is possible to build its own helper for such cases but I'd like to know if there's any easier way...

Upvotes: 28

Views: 41139

Answers (5)

jimSampica
jimSampica

Reputation: 12410

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")

Upvotes: 17

Jeff Tian
Jeff Tian

Reputation: 5893

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

Upvotes: 43

juFo
juFo

Reputation: 18567

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.

Upvotes: 3

ZippyV
ZippyV

Reputation: 13018

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.

Upvotes: 6

user2007801
user2007801

Reputation:

HttpContext.Current.Server.MapPath("~/Content/images/logo.png");

Upvotes: 0

Related Questions