WCF Web Api,处理IsThisTaken查询的正确方法是什么?

时间:2012-01-17 21:37:25

标签: wcf-web-api

我正在编写WCF webapi应用程序,需要检查是否已收到电子邮件地址。这需要是客户端代码在尝试PUT之前可以执行的查询。

所以,我要做的是将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);
    }

这对我来说并不“闻”。

我正在以正确的方式做这种是/否操作吗?

2 个答案:

答案 0 :(得分:2)

我认为只要为“存在”返回OK就可以了,而对于“不存在”则返回404

答案 1 :(得分:2)

我的建议是返回HttpResponseMessage而不是抛出异常。 你的RestValidationFailureException在哪里被处理?如果没有,它将导致500状态代码,这似乎不够。