ASP.NET поддержка маршрута Url MVC (точка)
Я надеюсь, что вы можете помочь мне с проблемой ниже.
Я использую ASP.NET MVC 3 на IIS7 и хотел бы, чтобы мое приложение поддерживало имя пользователя с точками.
Пример: http://localhost/john.ли
Вот как мой Глобал.asax выглядит так: (http://localhost/{имя пользователя})
routes.MapRoute(
"UserList",
"{username}",
new { controller = "Home", action = "ListAll" }
);
Приложения работают, когда я обращаюсь к другим страницам, таким как http://localhost/john.lee / details etc.
Но главная страница пользователя не работает, я бы как приложение, чтобы работать, как Facebook, где http://www.facebook.com/john.lee поддерживается.
Я использовал код ниже, и он не работал для меня вообще:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
Я смог использовать код ниже и заставить приложение принимать точки, но я определенно не хотел бы использовать код ниже по многим другим причинам, пожалуйста, скажите мне, что есть способ преодолеть эту проблему.
<modules runAllManagedModulesForAllRequests="false" />
5 ответов:
Я сталкиваются с той же проблемой. Поэтому лучшее решение для меня:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"></modules> <system.webServer>
Добавьте UrlRoutingHandler в сеть.конфиг. Это требует, чтобы Ваш url был немного более конкретным, однако (например, / Users / john.укрытие). Это заставляет каждый url, начинающийся с /Users, рассматриваться как url MVC:
<system.webServer> <handlers> <add name="UrlRoutingHandler" type="System.Web.Routing.UrlRoutingHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" path="/Users/*" verb="GET"/> </handlers> </system.webServer>
Просто добавьте этот раздел в Web.config, и все запросы к route / {*pathInfo} будут обработаны указанным обработчиком, даже если в pathInfo есть точки. (взято из ServiceStack MVC Host Web.пример конфигурации и этот ответ https://stackoverflow.com/a/12151501/801189 )
Это должно работать для обоих IIS 6 и 7. Вы могли бы назначить определенные обработчики для разных путей, после того, как "маршрут", изменив путь="*" В "добавить" элементы
<location path="route"> <system.web> <httpHandlers> <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" /> </httpHandlers> </system.web> <!-- Required for IIS 7.0 --> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <validation validateIntegratedModeConfiguration="false" /> <handlers> <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> </location>
Для тех, кто получает исключение "не может создать абстрактный класс" при использовании подхода
UrlRoutingHandler
, это, вероятно, связано с:
- использование ограниченного "пути" (например,
path="/Files/*"
) в вашей сети.объявление конфигурации, и- папка / путь с таким же именем существует в вашем проекте
Я не думаю, что точка-это проблема здесь. AFAIK единственным символом, которого не должно быть в имени пользователя, является a /
Не видя маршрута, который соответствует
john.lee/details
, трудно сказать, что не так, но я предполагаю, что у вас есть другой маршрут, который соответствует url-адресу, что препятствует правильному соответствию маршрута сведений о пользователе.Я рекомендую использовать такой инструмент, как Glimpse, чтобы выяснить, какой маршрут сопоставляется.