2012-01-16 2 views
3

В комментарии on this question, Phil упоминает, чтоПочему строки Hardcoding URL в приложении MVC - плохая идея? (Или это?)

жестко прописывать URL строки в приложение MVC это плохая идея. Помощники есть по этой причине

Это так? Если да, то почему?

+0

+1 нашли время, чтобы проверить на комментарий по в действительности :) – footy

ответ

5

Построение URL-адресов является результатом конфигурации маршрута в глобальном приложении вашего приложения. Когда вы используете помощников, таких как ActionLink, они проверяют конфигурацию маршрута и соответственно генерируют маршруты.

Если вы измените конфигурацию своего маршрута позже или установите приложение в виртуальный каталог, URLS, сгенерированные с помощью помощников в целом приложении, будут динамически изменяться, поэтому вам не нужно проверять и изменять каждую строку жестко заданного URL вручную, а ваше приложение менее вероятно, сломается.

Если вы хотите разметки якорей, вы можете использовать UrlHelper.Action Method. Внутри всех помощников, которые зависят от генерации URL-адресов, используйте этот метод.

<a href="@Url.Action("Logon", "Account")">logon<a> 
0

Я написал небольшой сайт с жестко закодированными URL-адресами. Я, как правило, избегаю практики сейчас из-за головной боли, причиной которой является изменение всех URL-адресов, как только вы нажимаете на производство.

Это был небольшой webapp, и он по-прежнему подталкивал меня к стене. Я буду следовать этому совету :)

+0

URL-адреса этот вопрос не меняется при нажатии на производство, если не использовать виртуальные каталоги. Это больше касается имен контроллеров и действий. – bzlm

+0

В то время как упомянутый вопрос касался имен контроллеров/действий, этот вопрос задавали вопрос о том, почему вышеупомянутый комментарий был правдой. Я просто упоминаю об этом как о другой причине, почему URL-адреса не должны быть жестко закодированы –

-1

Я предпочел бы не использовать Url.Action («входа», «Счет»), как это жёстко и любое изменение имени действия, его трудно определить.

Лучше мы можем написать расширение, как,

 public static MvcHtmlString ActionLink<TController>(this HtmlHelper helper, 
Expression<Func<TController, object>> expression, string displayText) 
      { 
       string controller = typeof(TController).GetControllerName(); 
       string action = expression.GetActionName(); 

       return helper.ActionLink(displayText, action, controller); 
      } 

, а затем использовать его в представлении, как,

@Html.Action<AccountController>(a=>a.Logon(),"Click here") 
+2

Это уже в Futures, правильно? И есть небрежное исполнение; есть отчет с номерами где-то ... – bzlm

+0

Это должно быть комментарий – archil

+0

Да, у него есть некоторые проблемы с производительностью, но если ваш сервер масштабируются достаточно ... Это может быть принято во внимание. в соответствии с [Эта ссылка] (http://devlicio.us/blogs/hadi_hariri/archive/2010/03/09/profiling-apps-1-of-n-the-mvc-actionlink.aspx) разница не слишком много – Manas