Если у меня есть относительный путь, который мне нужно получить с текущего сервера. Следующие не работают, потому что это не допустимый URI.
var request = WebRequest.Create("\path_to_resource")
Я считаю, что самым простым способом было бы установить путь в web.config, однако это легко сломать, забыв обновить конфигурацию, когда приложение будет перемещено на другой сервер. Есть ли лучший способ, чем?
var request = WebRequest.Create(ConfigurationManager.AppSettings["root"] + "\path_to_resource");
Ну, вы всегда можете использовать что-то вроде:
private string CurrentDomain()
{
string currDomain = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host;
if (Request.Url.Port != 80 && Request.Url.Port != 443)
currDomain += (":" + Request.Url.Port);
return currDomain;
}
Используя эти различные свойства Request, вы получите свое текущее доменное имя, на которое вы можете добавить свои подпапки для своего ресурса.
Request.Url.Scheme
является частью http / https
URL, System.Uri.SchemeDelimiter
является частью ://
, а Request.Url.Host
будет вашим фактическим именем хоста (т.е. example.com
).
Если ваш сайт работает на нестандартном порту, вызовы на Request.Url.Port
также добавят его в URL-адрес "имя домена".
Обратите внимание, что это не пуленепробиваемый код, так как он предполагает, что ваш (например) запуск SSL (https) на порту по умолчанию 443
Если вам нужны фактические физические пути к файлам, вы можете использовать Server.MapPath, чтобы получить физический путь к файлу "root" вашего ASP.NET и добавьте туда свои подпапки.
Смотрите также: Пути веб-сайта ASP.NET