У меня есть проект, который требует, чтобы у моих URL были точки в пути. Например, у меня может быть URL, например www.example.com/people/michael.phelps
URL с точкой генерируют 404. Моя маршрутизация в порядке. Если я перейду в michaelphelps, без точки, то все работает. Если я добавлю точку, я получу ошибку 404. Пример сайта работает на Windows 7 с IIS8 Express. URLScan не работает.
Я попытался добавить следующее в мой web.config:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
К сожалению, это не имело значения. Я только что получил ошибку 404.0 Not Found.
Это проект MVC4, но я не думаю, что это актуально. Моя маршрутизация работает нормально, и параметры, которые я ожидаю, есть, пока они не содержат точку.
Что мне нужно настроить, чтобы в моем URL могли быть точки?
asp.net-mvc
iis
iis-7
iis-express
iis-8
отметка
источник
источник
Ответы:
Я получил это, отредактировав обработчики HTTP моего сайта. Для моих нужд это работает хорошо и решает мою проблему.
Я просто добавил новый обработчик HTTP, который ищет конкретные критерии пути. Если запрос совпадает, он правильно отправляется в .NET для обработки. Я гораздо счастливее с этим решением, что взлом URLRewrite или включение RAMMFAR.
Например, чтобы .NET обработал URL-адрес, www.example.com/people/michael.phelps добавьте следующую строку в файл web.config вашего сайта в
system.webServer / handlers
элементе:редактировать
Есть другие сообщения, предполагающие, что решение этой проблемы -
RAMMFAR
илиRunAllManagedModulesForAllRequests
. Включение этой опции включит все управляемые модули для всех запросов. Это означает, что статические файлы, такие как изображения, PDF-файлы и все остальное, будут обрабатываться .NET, когда в этом нет необходимости. Этот вариант лучше не использовать, если у вас нет для него конкретного случая.источник
После некоторого осмотра я обнаружил, что relaxedUrlToFileSystemMapping вообще не работал для меня, в моем случае работало то, что для RAMMFAR было установлено значение true, то же самое верно для (.net 4.0 + mvc3) и (.net 4.5 + mvc4).
Имейте в виду, что при настройке RAMMFAR верно сообщение Hanselman о RAMMFAR и производительности
источник
Я считаю, что вы должны установить свойство relaxedUrlToFileSystemMapping в вашем файле web.config. Хаак недавно написал статью об этом (и есть несколько других постов SO, задающих те же вопросы)
Редактировать Из комментариев ниже, более поздние версии .NET / IIS могут требовать, чтобы это было в
system.WebServer
элементе.источник
Я застрял в этом вопросе в течение долгого времени после бесполезного следования всем различным средствам.
Я заметил, что при добавлении косой черты [/] в конец URL-адреса, содержащего точки [.], Он не выдавал ошибку 404 и фактически работал.
Я наконец решил проблему, используя переписывающее устройство URL, такое как IIS URL Rewrite, чтобы отслеживать конкретный шаблон и добавлять косую черту обучения.
Мой URL выглядит следующим образом: /Contact/~firstname.lastname, поэтому мой шаблон просто: /Contact/~(.*[^/])$
Я получил эту идею от Скотта Форсайта, см. Ссылку ниже: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
источник
Просто добавьте этот раздел в Web.config, и все запросы к маршруту / {* pathInfo} будут обрабатываться указанным обработчиком, даже если в pathInfo есть точки. (взято из примера ServiceStack MVC Host Web.config и этого ответа https://stackoverflow.com/a/12151501/801189 )
Это должно работать как для IIS 6, так и для 7. Вы можете назначить определенные обработчики различным путям после «маршрута», изменив path = "*" в элементах "add"
источник
MVC 5.0 Временное решение.
Многие из предложенных ответов не работают в MVC 5.0.
Поскольку проблему с 404 точками в последнем разделе можно решить, закрыв этот раздел конечной косой чертой, вот небольшой трюк, который я использую, чистый и простой.
Сохраняя при этом удобный для вас заполнитель:
добавьте немного jquery / javascript, чтобы выполнить работу:
обратите внимание на косую черту, которая отвечает за изменение
в
источник
Супер легкий ответ для тех, у кого это есть только на одной веб-странице. Отредактируйте вашу actionlink и + "/" в конце.
источник
Возможно, вы захотите использовать тире вместо точек.
В Pro ASP MVC 3 Framework они предлагают сделать дружественные URL:
В нем также упоминается, что URL-адреса должны быть удобными для чтения и изменения для людей. Возможно, причина подумать об использовании тире вместо точки также из той же книги:
Таким образом, хотя период все еще читаем для людей (хотя и менее читабелен, чем тире, IMO), он может все еще немного сбивать с толку / вводить в заблуждение в зависимости от того, что происходит после периода. Что делать, если у кого-то есть фамилия zip? Тогда URL будет /John.zip вместо / John-zip, что может ввести в заблуждение даже разработчика, написавшего приложение.
источник
.
) тире в URL-В зависимости от того, насколько важно сохранить ваш URI без строк запроса, вы также можете просто передать значение с точками как часть строки запроса, а не URI.
Например, www.example.com/people?name=michael.phelps будет работать без изменения каких-либо настроек или чего-либо еще.
Вы теряете элегантность наличия чистого URI, но это решение не требует изменения или добавления каких-либо настроек или обработчиков.
источник
Можно ли изменить структуру URL?
Для чего я работал, я попробовал маршрут для
но он потерпел неудачу с чем-либо, что имело. в этом.
Я переключил маршрут на
Теперь я могу вставить
localhost:xxxxx/File1.doc/Download
и все работает нормально.Мои помощники в представлении также подобраны на нем
это делает ссылку на
localhost:xxxxx/File1.doc/Download
формат, а также.Может быть, вы могли бы добавить ненужное слово типа "/ view" или действие в конце вашего маршрута, чтобы ваша собственность могла закончиться
/
следующим/mike.smith/view
источник
Это так же просто, как изменить путь = " ." к пути = " ". Просто удалите точку в пути для ExensionlessUrlHandler-Integrated-4.0 в web.config.
Вот хорошая статья https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
источник
Перепробовал все решения выше, но ни одно из них не помогло мне. Что сработало, так это то, что я удалил .NET версии> 4.5, включая все многоязычные версии; Со временем я добавил новые (только на английском) версии по частям. Прямо сейчас версии, установленные в моей системе, таковы:
И это все еще работает на данный момент. Я боюсь установить 4.6.2, потому что это может все испортить.
Так что я мог только предполагать, что либо 4.6.2, либо все эти неанглийские версии испортили мою конфигурацию.
источник
Мне удалось решить мою конкретную версию этой проблемы (пришлось создать /customer.html маршрут к / customer, конечные косые черты не разрешены), используя решение по адресу https://stackoverflow.com/a/13082446/1454265 , и подставив путь = "*. HTML".
источник
Решением может быть также рассмотрение кодирования в формате, который не содержит символ
.
, как base64.В JS должны быть добавлены
В контроллере
источник
Добавьте правило перезаписи URL в архив Web.config. У вас должен быть модуль перезаписи URL, уже установленный в IIS. Используйте следующее правило переписывания в качестве вдохновения для своего собственного.
источник
Также (связано) проверьте порядок сопоставлений вашего обработчика. У нас был .ashx с .svc (например, /foo.asmx/bar.svc/path) в пути после него. Сначала сопоставление .svc было таким 404 для пути .svc, который соответствовал перед .asmx. Я не слишком много думал, но, возможно, URL позаботится об этом.
источник
источник