如何从角度来自web api获取错误消息?

时间:2014-02-25 21:23:04

标签: angularjs asp.net-web-api

如何在Angular中获取web api返回的错误消息。

这就是我在fiddler中所得到的

{"Message":"The request is invalid.","ModelState":{"":["Name test1 is already taken."]}}

 ()''

我在错误功能中更改了什么才能显示'名称test1已被采用'? 这是Angular http帖子。

        $http({
            method: 'POST',
            url: 'api/Account/Register',
            data: { 'UserName': user.username, 'Password': user.password, 'ConfirmPassword': user.confirmpassword, 'Email': user.email },
        })
        .success(function () {
            toastr.success('successfully registered. ');                        
        })
        .error(function (error) {           
            toastr.error('error:' + error);                
        });

3 个答案:

答案 0 :(得分:1)

您从服务器获得的响应非常令人惊讶。它看起来不像一个有效的json字符串。模型状态中的第一项没有id。

{"Message":"The request is invalid.","ModelState":{"":["Name test1 is already taken."]}}

应该是这样的:

{"Message":"The request is invalid.","ModelState":{"message":["Name test1 is already taken."]}}

然后您可以使用

访问您的邮件
error.ModelState.message[0]

它应该可以工作,虽然错误响应看起来太复杂了。为什么数组中的错误消息?是不是可以像这样简化响应:

{"Message":"The request is invalid.","ModelState":{"message":"Name test1 is already taken."}} 

{"Message":"The request is invalid.","ModelState": "Name test1 is already taken."} 

或者,如果您需要一次返回多条错误消息:

{"Message":"The request is invalid.","ModelState": ["Name test1 is already taken."]}  

在最后一个示例中,您可以通过迭代error.ModelStage

来访问消息

答案 1 :(得分:1)

ModelState[""][0] 

会给你一条消息

答案 2 :(得分:0)

此代码对我有用:

$scope.message = response.statusText + "\r\n";
if (response.data.modelState) {
    for (var key in response.data.modelState) {
        $scope.message += response.data.modelState[key] + "\r\n";
    }
}
if (response.data.exceptionMessage)
    $scope.message += response.data.exceptionMessage;