2012-01-17 3 views
1

Я нахожусь в процессе написания приложения webapi для WCF и вам нужно проверить, принят ли адрес электронной почты. Это должен быть запрос, который клиентский код может сделать, прежде чем пытаться выполнить PUT.WCF WebApi, каков правильный способ обработки запроса IsThisTaken?

Итак, я пытаюсь использовать HEAD в сочетании с кодами состояния HTTP. Я немного не уверен, как это сделать, поскольку это простой ответ «да/нет», который требуется. Итак, я использовал HttpResponseExceptions, чтобы вернуть соответствующий код состояния.

[WebInvoke(Method = "HEAD", UriTemplate = "{email}")] 
    [RequireAuthorisation] 
    public void IsEmailAddressTaken(string email) 
    { 
     if (!Regex.IsMatch(email, Regexes.EmailPattern)) 
     { 
      throw new RestValidationFailureException("email", "invalid email address"); 
     } 

     if (_repository.IsEmailAddressTaken(email)) 
     { 
      throw new HttpResponseException(HttpStatusCode.OK); 
     } 

     throw new HttpResponseException(HttpStatusCode.NoContent); 
    } 

Это просто «не пахнет» прямо на меня.

Во-первых, я собираюсь сделать правильную работу с да/нет?

Во-вторых, есть способ просто вернуть соответствующий код состояния вместо того, чтобы прибегать к метанию исключений?

ОТВЕТ НА ВТОРОЙ ВОПРОС

Ответ на мой второй вопрос просто есть метод возвращают HttpResponseMessage

[WebInvoke(Method = "HEAD", UriTemplate = "{email}")] 
[RequireAuthorisation] 
public HttpResponseMessage DoesResourceExist(string email) 
{ 
    if (!Regex.IsMatch(email, Regexes.EmailPattern)) 
    { 
     return new RestValidationFailure("email", "invalid email address"); 
    } 

    if (_repository.IsEmailAddressTaken(email)) 
    { 
     return new HttpResponseMessage(HttpStatusCode.OK); 
    } 

    return new HttpResponseMessage(HttpStatusCode.NotFound); 
} 

ответ

2

Мое предложение состоит в том, чтобы вернуть HttpResponseMessage вместо исключения исключений. Работает ли ваш RestValidationFailureException где угодно? Если нет, это приведет к получению кода состояния 500, что не представляется адекватным.

+0

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

2

Я думаю, что было бы хорошо, чтобы просто вернуться OK для «существует» и 404 для «не существует»

+0

Причина, по которой я хотел получить «предварительную проверку», заключается в том, что пользователь может сразу увидеть, что письмо уже принято без необходимости заполнять остальную информацию на странице регистрации. Таким образом, мы можем перейти прямо к странице «Сбросить пароль». Я знаю, что меня раздражает, когда я отправляю всю свою информацию только для того, чтобы сказать «этот адрес электронной почты уже используется». В какой момент я помню, у меня уже есть аккаунт! –

+0

Обновлено мой ответ –

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