2016-07-01 1 views
0

У меня есть на следующий контроллере и маршрутПочему getByEmail возвращает 404 не найден?

[HttpGet] 
     [Route("getByEmail/{email:alpha}")] 
     public IHttpActionResult Get(string email) 
     { 
      var user = _userLogic.GetUserByEmail(email); 
      return Ok(user); 
     } 

Но когда я называю

localhost/WebApp/api/user/getByEmail/[email protected] 

Он вернется 404 не найден

I've tried 
localhost/WebApp/api/user/getByEmail/[email protected] 

Но он идет, чтобы получить все Может кто-то пожалуйста, помогите меня?

+0

нужно много больше информации. Какой тип почтового сервера? Похоже, вам нужен api, установленный в вашем веб-браузере. – jdweng

+0

Из [attribute-routing-in-web-api-2] (http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web- api-2) alpha соответствует символам латинского алфавита в верхнем или нижнем регистре (az, AZ) – JaredStroeb

ответ

5

Вероятно, из-за вашего определения route constraint из :alpha, который требует, чтобы ваш параметр соответствовал только прописным и строчным символам.

Поскольку вы собираетесь проходить в @, это приведет к неправильному согласованию маршрута и, следовательно, вы получите ошибку 404.

Просто удалите ограничение и он должен работать, как ожидалось:

[Route("getByEmail/{email}")] 
+0

Я бы предпочел проверять электронную почту с регулярным выражением. – gretro

+0

@ Рион Уильямс .. И какой путь поставить вместо альфы? –

+0

@gretro Если вы хотите сделать что-то подобное, вы можете определить пользовательское ограничение маршрута (используя регулярное выражение или какой-либо другой механизм). Тем не менее, проверка и маршрутизация, как правило, будут две разные вещи. –

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

  • Нет связанных вопросов^_^