2013-12-05 1 views
7

Мне нужно отправить адрес электронной почты на метод Web.Api get. Мне нужно проверить, существует ли электронный адрес в нашей системе, прежде чем разрешить кому-то зарегистрироваться для новой учетной записи.Кодировать адрес электронной почты для перехода на Web.API

Моя первая мысль была encode адрес электронной почты, а затем decode его, когда он был внутри Get действий

URL-адрес выглядит примерно так http://mysite/Api/RTSCredit/jharding%40email.com

Однако это всегда ошибки с 404 ответа

Вот WebApiConfig.cs

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

Когда я посылаю в виде простой строки http://mysite/Api/RTSCredit/someemail

Он ударяет Получить действие, как я предпочел бы, но, очевидно, не может возвращать полезную ценность.

Вот Get Action

[HttpGet] 
public HttpResponseMessage Get([FromUri] string emailAddress) 
{ 
    using (IRtsCreditDal rtsCreditDal = new RtsCreditDal()) 
    { 
     var listOfExistingUsers = rtsCreditDal.GetUsersByEmail(emailAddress); 
     if (listOfExistingUsers == null || listOfExistingUsers.Count == 0) 
     { 
      return Request.CreateResponse(HttpStatusCode.NotFound, "not found"); 
     } 
     else 
     { 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
    } 
    } 

Какие изменения мне нужно сделать для того, чтобы пройти по электронной почте на эту Action?

Поскольку я играл дальше, это не похоже на period в URL. Я мог бы легко сделать что-то, чтобы заменить этого персонажа, но это похоже на взлома.

+0

Какая ошибка у вас т? – SLaks

+0

Он получает ошибку 404 –

+0

Что произойдет, если вы используете: http: // mysite/Api/RTSCredit? EmailAddress = enodedaddress? – Maess

ответ

19

Попробуйте добавить конец/в конце сообщения электронной почты от клиента:

http://localhost:8800/api/users/[email protected]/ 
+0

На самом деле это должен быть ответ, если вы хотите получить адрес электронной почты на своем маршруте и в строке запроса. – swannee

0

Попробуйте декодировать значение параметра строки.

String newEmailAddress = HttpUtility.HtmlDecode(emailAddress); 

Это заменит символы, как «%» персонажами исходного текста.

2

Изменить маршрут по умолчанию обратно

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

Удалить атрибут [FromUri] из действий, то вы должны быть в состоянии назвать свое действие с помощью URL, предложенный Maess:

/mysite/Api/RTSCredit?emailAddress=jharding%40email.com 
+0

не обнаружено HTTP ресурс, который соответствует запросу URI? HTTP: //localhost/Stc.RtsCredit.Web.BuyNow/Api/RTSCredit mkastle% 40rtsfinancial.com ' , На контроллере RTSCredit не найдено действий, соответствующих запросу.

+0

Странно? Я скопировал ваш код, и он проверяет здесь здесь изменения. –

+0

На самом деле я вернулся и снова внес изменения, и он работает.Не уверен, что я пропустил в первый раз, спасибо! –

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