Pregunta

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.

¿Fue útil?

Solución

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top