我正在创建一个C#应用程序,它进行REST调用并使用OAuth2.0身份验证。
对于OAuth2.0,过程是通过POST获取令牌,提供client_id,client_secret和grant_type。
此后进行GET调用时,需要在标题字段中提供从POST返回的标记。
所以,这提出了两个问题:
答案 0 :(得分:1)
我建议你创建2个班级。一个用于您的令牌,另一个用于响应您的来电。
实际令牌不是初始调用中唯一重要的位,其类型以及令牌过期时也很重要,因此您知道要创建哪种授权标头(很可能是 Bearer )和何时申请新令牌或刷新使用中的令牌。
因此,首先使用像Postman这样的客户端来查看响应,以便您可以在C#类中镜像它们。
获得令牌类后,转到下一个班级。
您当然可以做其他事情,利用"动态" 等
你的电话可能如下:
JsonConvert.DeserializeObject<dynamic>(responseString);
这样您就不必为返回类型创建类,但我仍然会推荐其他方法。
对于第二个问题,返回类型将是您为反序列化器指定的任何内容。
让我们以令牌为例:
public sealed class TokenModel
{
public string access_token { get; set; }
public string token_type { get; set; }
public int expires_in { get; set; }
}
然后您获取该数据的调用如下所示:
var tokenModel = JsonConvert.DeserializeObject<TokenModel>(responseJson);
答案 1 :(得分:0)
问题1:是的,您可以将令牌存储为字符串。没问题。
问题2:取决于您的设置方式。但是,通常会在Authorization标头中添加令牌而不是请求正文。从请求返回的结果不应包含其自身的令牌。我想这是一个Json对象,那么你只需要一个POCO c#类来允许它序列化。
例如,结果返回是json:
{
"Property1": "Value1",
"Property2": "Value2"
}
然后你的课将
public class ReturnResult
{
[JsonProperty("Property1")]
public string Property1 { get; set; }
[JsonProperty("Property2")]
public string Property2 { get; set; }
}