ASP.NET MVC3 Root-относительный путь к виртуальному пути в контроллере или модели

Это звучит как достаточно простой вопрос, но я не могу найти ответ на мою жизнь. Как преобразовать относительный корень URL (~/my/path) к виртуальному пути (/mywebsite/my/path) в контроллере и / или модели?

На вид это достаточно просто сделать, просто позвоните @Url.Content("~/my/path/"), И получить физический путь в контроллере так же просто, используя Server.MapPath("~/my/path"), Но я не могу понять, как получить виртуальный путь в контроллере.

Моя основная проблема заключается в том, что у меня есть относительный путь к изображению, который я передам объекту JSON, который будет возвращен. В большинстве случаев это будет прочитано javascript и помещено на страницу где-нибудь, и я не могу использовать @Url.Content в моем коде JavaScript. Кроме того, в некоторых случаях этот объект JSON будет использоваться внешним приложением, которое не поймет, что ~ средства.

1 ответ

Решение

В контроллере вы можете использовать свойство Url:

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

В модели вы не делаете ничего подобного. Модель не должна ничего знать о генерации URL. Это просто не его ответственность. Если ему нужно работать с URL-адресом, этот URL-адрес должен быть передан ему слоями вашего приложения, которые имеют дело с URL-адресами (то есть слоями, которые имеют доступ к HttpContext).

Другие вопросы по тегам