2017-10-05 74 views
0

我正在创建一个C#应用程序,它可以进行REST调用并使用OAuth2.0身份验证。OAuth2.0的返回类型方法(C#)

对于OAuth2.0,过程是通过POST获取令牌,提供client_id,client_secret和grant_type。

此后进行GET调用时,需要在标题字段中提供从POST返回的令牌。

所以,这带来了2个问题:

  1. 在POST方法来获取令牌,则返回一个JSON一个包含多个属性(包括令牌和超时时间)。因为它是必需的标记,JsonConvert(var token = JsonConvert.DeserializeObject>(responseJson)[“access_token”]。ToString();)仅用于将此变量映射到字符串。该方法将该变量作为字符串返回。对于请求令牌,是否使用字符串作为函数的返回类型是一种正确的方法?
  2. 在从REST服务调用中获取数据的GET方法中,令牌传入时使用搜索条件,这会返回Json结果。 JsonConvert.DeserializeObject> <>用于将其映射到.NET对象。该功能的回报是什么?它不是字符串,因为它包含多个变量。

回答

1

我建议你创建2个班。一个用于您的令牌,另一个用于您的致电的响应。

的实际令牌是不是在你的初始调用的唯一重要的一点,它的类型,当令牌过期也很重要,这样你就知道要创建什么样的授权头(最有可能承载)以及何时请求新的令牌或刷新正在使用的令牌。

因此,首先使用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); 
+0

谢谢安德烈!如果我在令牌方法中返回所有其他属性,返回值是什么?我可以将它设置为'公共静态字符串RequestToken()',这就是为什么我只是带回一个变量。 – Dev

+0

增加了一个令牌过程的例子。为了简单起见,类属性完全匹配您期望从JWT令牌接收的内容 –

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; } 
    } 
+0

谢谢!是的,我创建了一个类似你所说的类。我已经在GET调用函数下调用了这个类。但是,不知道该怎么回报? var callreturn = JsonConvert.DeserializeObject (getfunctionreturnvariable);在你的类的情况下,但最终的类型是什么(在顶部的方法中...... public static ____ getfunction(string input))? – Dev

+0

这取决于你的功能没有更多的上下文我不知道如何回答:) – duongthaiha