2016-07-08 89 views
2

我已经使用新的API ServiceStack这样一直:如何实现组合使用ServiceStack与自定义REST API定制ResponseStatus

[Route("/me/login/")] 
public class LoginRequest : IReturn<LoginResponse> 
{ 
    public string password { get; internal set; } 
    public string username { get; internal set; } 
} 

public class LoginResponse 
{ 
    public string token { get; set; } 
} 

...

client.PostAsync(new LoginRequest { username = email, password = password }); 

然而,服务器是一个Django REST Api。所以,当我键入密码incorrent我得到如下回应:

{ 
    "non_field_errors": [ 
     "Unable to login with the given credentials." 
    ] 
} 

我怎样才能检索到的non_field_errors财产利用新ServiceStack API的信息? (我应该重写什么?)

回答

2

ServiceStack服务客户端仅用于ServiceStack服务,我建议使用ServiceStack's HTTP Utils来呼叫第三方服务。

的响应DTO来匹配JSON看起来像:

public class LoginResponse 
{ 
    public string token { get; set; } 
    public string[] non_field_errors { get; set; } 
} 

如果响应返回比你需要从错误中体响应读取JSON,而不是一个非200 HTTP错误,例如:

try 
{ 
    var response = baseUrl.CombineWith("me/login") 
     .PostJsonToUrl(new LoginRequest { ... }) 
     .FromJson<LoginResponse>(); 
} 
catch (Exception ex) 
{ 
    HttpStatusCode? errorStatus = ex.GetStatus(); 
    string errorBody = ex.GetResponseBody(); 
    var errorDto = errorBody.FromJson<LoginResponse>(); 
} 
相关问题