2015-12-18 3 views
0

Все встроенные методы структуры в MVC, например Url.Action или Url.Content, производят только относительные URL-адреса в полученном html. Многие ответы SO предоставили способы получить абсолютный путь. For example:Есть ли причина не использовать абсолютные пути в asp.net MVC?

using System; 
using System.Web; 
using System.Web.Mvc; 

public static class UrlExtensions 
{ 
    public static string Content(this UrlHelper urlHelper, string contentPath, bool toAbsolute = false) 
    { 
     var path = urlHelper.Content(contentPath); 
     var url = new Uri(HttpContext.Current.Request.Url, path); 

     return toAbsolute ? url.AbsoluteUri : path; 
    } 
} 

работает для меня.

Мой вопрос в том, есть ли когда-либо причина не использовать абсолютный путь? Это лучше, с точки зрения того, чтобы сделать ваш сайт более открытым для веб-лома, инструментов доступности, RSS-каналов и т. Д. Есть ли нижняя сторона? Похоже, что абсолютный путь должен быть по умолчанию, а относительный путь должен быть пользовательской реализацией.

ответ

3

В контексте веб-приложения, где содержимое страницы генерируется динамически, возможно, менее важно, чтобы URL-адреса были относительными. Традиционно, со статическим HTML, было бы очень плохой идеей жестко кодировать абсолютный путь. Если вам когда-либо понадобится переместить сайт, для этого потребуется найти каждый экземпляр абсолютного URL-адреса и изменить его.

Однако по-прежнему лучше использовать только тот URL, который необходим для маршрутизации. Хотя, возможно, реже, есть такие вещи, как Google Cache, Archive.org и т. Д., Где использование абсолютного пути эффективно нарушает все возможности навигации в кеше. Если не считать этого, хотя, возможно, и менее распространенного сегодня, многие прокси-серверы все еще существуют там, где пользователи просматривают веб-страницы кэша, а затем динамически направляют трафик в кеш, а не на фактический веб-сайт. Абсолютные URL также нарушают это.

Больше всего это просто не нужно, и хотя это минимально, это добавляет дополнительный вес к странице. Для пользователей широкополосного доступа это бессмысленно, но для тех, кто использует 3G-данные по международному соединению, подсчитывается каждый байт.