Я нахожусь в процессе написания приложения 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);
}
спасибо. Я просто получил там себя :) Я думаю, что я, вероятно, добавлял свое решение к моему вопросу, поскольку вы набирали этот ответ. –