【问题标题】:WCF WebApi, what is the correct way to handle IsThisTaken query?WCF Web Api,处理 Is This Taken 查询的正确方法是什么?
【发布时间】:2012-02-12 16:42:09
【问题描述】:

我正在编写 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);
    }

这对我来说并不“闻起来”。

我是否会以正确的方式进行这种是/否操作?

【问题讨论】:

    标签: wcf-web-api


    【解决方案1】:

    我认为只为“存在”返回 OK 并为“不存在”返回 404 就可以了

    【讨论】:

    • 我想要“预检查”的原因是用户可以立即看到电子邮件已被接收,而无需在注册页面上填写其余信息。因此,我们可以直接进入“重置密码”页面。我知道当我输入所有信息却被告知“此电子邮件地址已被使用”时,我会感到恼火。那时我记得我已经有一个帐户了!
    【解决方案2】:

    我的建议是返回 HttpResponseMessage 而不是抛出异常。 您的RestValidationFailureException 是否在任何地方被处理?如果不是,则会导致 500 状态码,这似乎不够用。

    【讨论】:

    • 谢谢。我自己刚到那里:) 我想我可能是在你输入这个答案时将我的解决方案添加到我的问题中。
    猜你喜欢
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2016-10-12
    相关资源
    最近更新 更多