2012-01-17 17 views
1

私はWCF webapiアプリケーションを作成中で、電子メールアドレスが取得されているかどうかを確認する必要があります。これはクライアント側のコードがPUTを試す前に行うことができるクエリである必要があります。WCF WebApi、IsThisTakenクエリを処理する正しい方法は何ですか?

私がやっていることは、HTTPステータスコードと組み合わせてHEADを使用することです。私はそれが必要な単純なイエス/ノーレスポンスなので、それをやり遂げる方法を少し不明です。したがって、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); 
    } 

これはちょうど私の右の「臭い」ではありません。

まずは、このようなはい/いいえの操作を正しい方法で行うつもりですか?

第2に、例外をスローする代わりに関連するステータスコードを返す方法がありますか? 2番目の質問TO

ANSWER

私の2番目の質問への答えはちょうど方法は、私はそれだけで "存在" のためにOKを返すために大丈夫だと思う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

を返してきたことです404は「存在しない」のため

+0

「プレチェック」が必要な理由は、ユーザーが登録ページの残りの情報を入力しなくても、電子メールがすでに取得済みであることをすぐに確認できるようにすることです。だから、代わりに「リセットパスワード」ページにまっすぐに行くことができます。 「このメールアドレスはすでに使用されています」と言われるだけですべての情報を入力すると迷惑をかけることがわかります。どの時点で私は既にアカウントを持っていることを覚えています! –

+0

私の答えは –

関連する問題