У меня есть приложение ASP.NET MVC 3, которое использует PortableAreas (не спрашивайте меня, почему - я не знаю).Мне нужно сопоставить URL-адрес области с реальной папкой в системе.
Вот моя фактическая структура папок:
C:\project
|-web.app\
|-|-Areas\
|-web.locations.area\
|-|-content\
|-|-|-scripts\
|-|-views\
В настройке IIS веб-приложение сопоставлено с C:/ проект.В проекте есть каталог под названием «Области».В этой папке есть виртуальный каталог в IIS, называемый «местоположения», который указывает на C: \ project \ web.locations.area \
В представлении области, используя синтаксис Razor, япри попытке создать Server.MapPath, и каждый раз происходит сбой:
@Server.MapPath("~/locations/scripts/my.script.js")
Это всегда приводит к "C: \ project \ web.app \ location \ scripts \ my.script.js", что неверно,Файл фактически находится в "C: \ project \ web.locations.area \ content \ scripts \ my.script.js".
Когда я звоню @Url.Content("~/locations/scripts/my.script.js")
, он разрешается на правильный URL, как я и ожидал.Этот URL действительно существует, когда я нажимаю на него через браузер, и файл сценария правильно обслуживается из IIS / моего веб-приложения asp.net.
Почему вызов Server.MapPath дает неверные результаты?Как сопоставить путь в PortableArea с фактическим путем в файловой системе?