Ответ 1
Я столкнулся с той же проблемой. Поэтому лучшим решением для меня является:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
<system.webServer>
Я надеюсь, что вы можете помочь мне с проблемой ниже.
Я использую ASP.NET MVC 3 на IIS7 и хочу, чтобы мое приложение поддерживало имя пользователя с точками.
Пример: http://localhost/john.lee
Вот как выглядит мой Global.asax: (http://localhost/ {имя пользователя})
routes.MapRoute(
"UserList",
"{username}",
new { controller = "Home", action = "ListAll" }
);
Приложения работают, когда я обращаюсь к другим страницам, таким как http://localhost/john.lee/details и т.д.
Но основная страница пользователя не работает, я хотел бы, чтобы приложение работало как Facebook, где поддерживается http://www.facebook.com/john.lee.
Я использовал ниже код, и он вообще не работал у меня:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
Мне удалось использовать код ниже и заставить приложение принимать точки, но я определенно не хотел бы использовать ниже код по разным причинам, пожалуйста, скажите мне, что есть способ преодолеть эту проблему.
<modules runAllManagedModulesForAllRequests="false" />
Я столкнулся с той же проблемой. Поэтому лучшим решением для меня является:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
<system.webServer>
Добавьте UrlRoutingHandler в web.config. Это требует, чтобы ваш URL был немного более конкретным (f.e./Users/john.lee). Это заставляет каждый 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, и все запросы к маршруту /{* pathInfo} будут обрабатываться указанным обработчиком, даже если в pathInfo есть точки. (взято из примера ServiceStack MVC Host Web.config и этого ответа fooobar.com/questions/26862/...)
Это должно работать как для 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/*"
) в вашей декларации web.config иЯ не думаю, что проблема здесь. AFAIK единственным char, который не должен быть в имени пользователя, является /
Не видя маршрут, который соответствует john.lee/details
, трудно сказать, что неправильно, но я предполагаю, что у вас есть другой маршрут, который соответствует URL-адресу, не позволяя правильному согласованию маршрута данных пользователя.
Я рекомендую использовать инструмент, например Glimpse, чтобы выяснить, какой маршрут сопоставляется.