2015-12-18 5 views

ответ

8

Прежде всего, вы должны генерировать маршруты через что-то @Html.ActionLink, @Url.Action или аналогичные для любых действий. Это не волшебная пуля.

Из MSDN:

AppendTrailingSlash

Получает или задает значение, указывающее, является ли замыкающие косые добавлены , когда виртуальные пути нормированы.

(Source)

LowercaseUrls

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

(Source)

Формат URL является (source):

схема: [// [пользователь: пароль @] хост [: порт]] [/] путь [? query] [# fragment]

Отчасти это касается участка пути и только этого. Любая часть строки запроса не подвержена влиянию. AppendTrailingSlash добавляет/в конец части пути.

Так что для этого кода:

@Html.ActionLink("About this Website", "About") 

С параметрами маршрута, установленных в routes.LowercaseUrls = true; и routes.AppendTrailingSlash = true; он будет генерировать:

<a href="/home/about/">About this Website</a> 

С параметрами маршрута, установленных в routes.LowercaseUrls = false; и routes.AppendTrailingSlash = true; он будет генерировать:

<a href="/Home/About/">About this Website</a> 

С параметрами маршрута, установленных в routes.LowercaseUrls = true; и routes.AppendTrailingSlash = false; он будет генерировать:

<a href="/home/about">About this Website</a> 

с параметрами маршрута, установленных в routes.LowercaseUrls = false; и routes.AppendTrailingSlash = false; он будет генерировать:

<a href="/Home/About">About this Website</a> 

Для этого кода:

@url.action("someAction","someController",new{Name=Test}) 

С параметрами маршрута, установленными на routes.LowercaseUrls = true; и routes.AppendTrailingSlash = true;, он будет генерировать:

/somecontroller/someaction/?Name=Test 

Некоторые ошибки, которые вы могли бы ударяя:
Существует в MVC 4 bug with areas, в отношении к нижнему регистру Urls.

Комплект NuGet LowercaseRoutesMVC preports, чтобы исправить эту ошибку.


Возможные решения в нижний регистр адреса на вашем Применение

Если Вы желаете, чтобы изменить поведение вне приложения, следует использовать что-то вроде Url Rewrite для IIS, который может превратить ваш URL. Пример этого here.

+0

Вы имеете в виду, если у меня есть какая-то ссылка вроде: '...', это не работает? –

+0

Я только что сделал быстрый запуск в своем тестовом приложении, а '@ Url.Action (" someAction "," someController ")', похоже, соблюдает эти настройки. – NikolaiDante

+0

и должен ли он работать и для параметров? например: '...' if name = Test, это должно перевести его на ** test **? –

1

Я думаю, вы смущены относительно того, что они делают.

В случае AppendTrailingSlash все, что он делает, это добавить / в конец маршрутов, генерируемых MVC. (https://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.appendtrailingslash(v=vs.110).aspx)

Аналогичным образом, когда вы используете LowercaseUrls, MVC будет генерировать URL-адреса всех строчных букв. (https://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.lowercaseurls(v=vs.110).aspx)

Они не будут переписывать URL-адреса на стороне клиента, как ожидалось.

+0

что вы имеете в виду, не будет переписываться на стороне клиента? то где он переписывается?! –

+1

Когда вы используете HTML-хелпер-тег, например '@ Html.ActionLink', где применяются эти изменения. Когда я говорю на стороне клиента, я имею в виду пользователя, просматривающего ваш сайт. Эти настройки не изменят URL в его/ее адресе. – Matthew

+0

Спасибо, понял. –