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 34

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, чтобы выяснить, какой маршрут сопоставляется.