ASP.NET MVC Colon в URL - PullRequest
       15

ASP.NET MVC Colon в URL

6 голосов
/ 14 января 2011

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

На сайте, над которым я работаю, я хочу иметь возможность передавать названия фильмов, книг и т. Д. В мой URL, включая двоеточие, например:

mysite.com/Movie/Bob:The Return

Это будет использовано моим MovieController, например, как строка и использовано далее по линии.

Я понимаю, что двоеточие не является идеальным.У кого-нибудь есть другие предложения?Каким бы бедным он ни был в настоящее время, я делаю поиск и замену всех двоеточий (:) на другой символ, а затем замену назад, когда я хочу использовать его на конце контроллера.

Ответы [ 5 ]

7 голосов
/ 11 сентября 2013

Я решил эту проблему, добавив это в свой web.config:

<httpRuntime requestPathInvalidCharacters=""/>

Это должно быть в разделе system.web.

По умолчанию:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/>

Таким образом, чтобы сделать исключение только для двоеточия, оно станет

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/>

Подробнее на: http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

Для того, что я понимаю, символ двоеточия приемлем как незашифрованныйсимвол в URL.Я не знаю, почему они добавили его по умолчанию в requestPathInvalidCharacters.

3 голосов
/ 14 января 2011

Рассмотрим Кодирование и декодирование URL Заголовки ваших фильмов.

В конечном итоге вы получите foo.com/bar/Bob%58The%20Return

В качестве альтернативы рассмотрите возможность использования HTMLпомощник для удаления недружественных символов URL в URL (метод URLFriendly()).Преимущества SEO между двоеточием и заполнителем (например, тире), вероятно, будут незначительными.

2 голосов
/ 14 января 2011

Одной из самых больших проблем при вашем подходе является то, что название фильма не всегда будет уникальным (например, «Итальянская работа»). А также насчет других нелегальных символов (например, скобок и т. Д.).

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

Хорошим примером является URL-адрес этой страницы. Вы можете видеть, что удаление заголовка страницы все еще работает:

ASP.NET MVC Colon в URL

ASP.NET MVC Colon в URL

0 голосов
/ 14 января 2011

Самый простой способ - использовать System.Web.HttpUtility.UrlEncode () при построении URL-адреса и System.Web.HttpUtility.UrlDecode при интерпретации возвращаемых результатов.У вас также могут возникнуть проблемы с пробелом, если вы сначала не закодируете значение.

0 голосов
/ 14 января 2011

Двоеточие - это зарезервированный и недопустимый символ в URI в соответствии с RFC 3986 .Так что не делайте то, что нарушает спецификацию.Вам необходимо либо закодировать URL, либо использовать другой символ.А вот хороший пост в блоге , на который вы можете взглянуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...