2015-07-14 1 views
0

Маршрутизация по умолчанию:ASP.NET маршрутизации веб-API игнорирует любой адрес электронной {имя пользователя}

 public static void Register(HttpConfiguration config) 
     { 
      // Web API routes 
      config.MapHttpAttributeRoutes(); 
      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

     } 

У меня есть этот кусок кода, который находится внутри контроллера.

 /// <summary> 
     /// Gets all the information for a specific username 
     /// </summary> 
     /// <param name="userName"></param> 
     /// <returns></returns> 
     [Route("GetUser/{userName}")] 
     [HttpGet] 
     public List<SomeList> GetUserObject(string userName) 
     { 
      Trace.WriteLine(userName); 

      Trace.WriteLine("HIT THIS <-----------"); 

      return userName.getList(); 
     } 

Я переименовал несколько вещей, которые не имеют отношения к делу, но это точная настройка.

Использование Почтальон, если я посылаю запрос к этому API по адресу:

http://localhost:3040/api/SomeController/GetInformation/[email protected]

он никогда не ударит метод, но если я удалю «.com» это ударит метод.

Почему он игнорирует «.com»?

Все, что угодно, кроме добавления к нему «.com».

EDIT **

Это не совсем работа, я попробовал следующее звено в списке, но это не совсем работает, потому что я считаю, что связь MVC и то, что я работаю с является Web API, некоторые маршрутизация и все обрабатываются по-разному, я не совсем в состоянии сопоставить различия.

это в Web.config

<rewrite> 
     <rules> 
     <rule name="Add trailing slash" stopProcessing="true"> 
      <match url="(userName/.*\..*[^/])$"/> 
      <action type="Rewrite" url="{GetUser}/"/> 
     </rule> 
     </rules> 
    </rewrite> 

Это в WebApiConfig.cs Это новый маршрут я добавил выше по умолчанию один

config.Routes.MapHttpRoute(
       name: "GetUser", 
       routeTemplate: "api/{controller}/GetUser/{userName}/", 
       defaults: new 
       { 
        userName = RouteParameter.Optional 
       } 
      ); 

Это еще не работает , Что я делаю не так?

Хорошо, эта линия зафиксировал его:

<modules runAllManagedModulesForAllRequests="true"/> <!--Fix for IIS server trying to map to directories instead of URL when a '.' (period) is found in the route mapping.--> 
+0

возможно дубликат [Dot символ '' в MVC Web API 2 для запроса, например api/people/STAFF.45287] (http://stackoverflow.com/questions/20998816/dot-character-in-mvc-web-api-2-for-request-such- как-апи-люди-сотрудники-45287) –

ответ

1

Эта проблема вызвана изменением "" в вашем адресе электронной почты (который является [email protected]), IIS подумает, что вы ищете файл с именем someemail @ gmail, и его тип - com на сервере.

решение в этом посте https://stackoverflow.com/a/21000255/2077808

Смежные вопросы