ASP.NET MVC3 Root-relative path to virtual path in Controller or Model
Asked Answered
G

1

5

This sounds like a simple enough question, but can't find the answer for the life of me. How does one convert a root-relative url (~/my/path) to a virtual path (/mywebsite/my/path) in the Controller and/or Model?

On a view it's easy enough to do, just call @Url.Content("~/my/path/"). And getting the physical path in the controller is just as easy using Server.MapPath("~/my/path"). But I can't figure out how to get the virtual path in the controller.

My main issue is that I have a root-relative path of an image that I will be passing to a JSON object that will be returned. In most cases this will be read by javascript and put on the page somewhere, and I can't use @Url.Content in my javascript code. Also, in some instances this JSON object will be used by an external application that won't understand what the ~ means.

Genniegennifer answered 20/1, 2012 at 5:51 Comment(3)
Url.Content should work fine in the controller too (it returns a string). Its in namespace System.Web.MvcInterfluent
Why do you need the virtual path to the controller?Groomsman
@Groomsman - I actually need the virtual path to an image that I'm returning in a JSON object. I'll update the question.Genniegennifer
D
7

In the controller you could use the Url property:

public ActionResult Foo()
{
    string url = Url.Content("~/my/path");
    ...
}

In the Model you don't do anything like this. A model shouldn't know anything about url generation. It simply not its responsibility. If it needs to work with an url this url should be passed to it by the layers of your application that deal with urls (which are the layers that have access to an HttpContext).

Douglas answered 20/1, 2012 at 7:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.