0

我让用户在以下代码中注册我的应用程序:

        [System.Web.Http.HttpPost]
        [System.Web.Http.AllowAnonymous]
        //[ValidateAntiForgeryToken]
        //public HttpResponseMessage Register(RegisterModel model, string returnUrl)
        public UserProfileDto Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                if (WebSecurity.UserExists(model.UserName))
                {
                   throw new HttpResponseException(HttpStatusCode.Conflict);
                }
                else
                {
                    // Attempt to register the user
                    try
                    {
                        WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                        WebSecurity.Login(model.UserName, model.Password);

                        InitiateDatabaseForNewUser(model.UserName);

                        FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie: false);

                        var responseMessage = new HttpResponseMessage(HttpStatusCode.Redirect);
                        responseMessage.Headers.Location = new Uri("http://www.google.com");

                        return _service.GetUserProfile(WebSecurity.CurrentUserId);
                    }
                    catch (MembershipCreateUserException e)
                    {
                        throw new HttpResponseException(HttpStatusCode.NotFound);
                    }
                }
            }

            // If we got this far, something failed
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }

我的问题:如果我遇到这些异常之一,我想告诉用户“嘿,该用户名已经存在!” 或“哎呀,发生了什么事。我们正在调查。” 等客户端,我应该如何处理这个?只需检查标题中的状态并相应地向视图发送一些内容?

这是否意味着每个可能的错误都应该使用不同的状态码?这似乎是错误的......这让我问 - 我应该将某种与状态相关的数据发送回客户端吗?如果是这样,我的返回类型(在本例中为 UserProfileDto)是否应该包含一个我可以填充但我认为适合我的控制器的“状态”字段?

抱歉,我在那里问了一堆......只是想弄清楚如何正确地做到这一点。

4

2 回答 2

1

ReasonPhrase的存在是为了提供一个关于错误发生原因的可读描述。如果简单的文本描述不足以将问题传达给最终用户,那么有一些新兴的标准方法可以向您的用户描述问题。

application/api-problem+json https://datatracker.ietf.org/doc/html/draft-nottingham-http-problem-03 application/api-problem+xml

application/vnd.error+json https://github.com/blongden/vnd.error application/vnd.error+xml

于 2013-04-05T12:47:59.117 回答
0

我将使用允许您将注册信息或错误消息传递回客户端的模型。

模型可能看起来像:

public class RegistrationModel
{
    public UserProfileDto UserProfile { get; set; }
    public ErrorModel Error { get; set; }
}

public class ErrorModel 
{
    public string Message { get; set;}
}

此外,您可能应该返回一个允许您指定模型的 HttpResponseMessage:

return Request.CreateResponse<RegistrationModel>(HttpStatusCode.Created, MyModel);
于 2013-04-05T00:05:49.493 回答