【问题标题】:Is single Request object instance in REST client okay?REST 客户端中的单个请求对象实例可以吗?
【发布时间】:2014-07-23 15:23:51
【问题描述】:

我正在为 C# WinForm 应用程序编写一个简单的 REST 客户端。我使用RestSharp 使发送请求和获得响应更容易。我有几个关于我应该如何设计我的客户端的问题。

用户只与客户端交互一次。他推了一个Button,客户端被实例化并传递给private方法在后台做一些逻辑。它从服务器访问对象并将它们与用户内部数据库中的对象同步。

关键是客户端的方法是由private 方法访问的,该方法在用户在 GUI 中的单个操作之后调用。他无法控制调用客户端的哪些方法以及调用顺序。

所以我的问题是:

  • 是否可以在实例化客户端时仅向服务器请求一次令牌,然后将其存储在客户端实例中以供将来在客户端的以下请求中参考?令牌是用户名和密码的哈希值,因此它不应随时间而改变。当然,一旦我创建了一个新的客户端实例,它会再次向服务器请求令牌。

  • 可以在我的客户端中保留一个 Request 对象实例吗?然后我可以只设置一次请求标头,所有访问 API 的方法只需要更改请求的资源 URL 和 HTTP 方法。这将减少我的代码中的重复性。

例如:

public PriceListItem[] GetPriceListItems()
{
   string requestUrl = Resources.PriceListItemsUrl;

   var request = new RestRequest(requestUrl, Method.GET);
   request.AddHeader("SecureToken", _token);

   var response = Client.Execute(request) as RestResponse;

   JObject jObject = JObject.Parse(response.Content);
   var priceListItems = jObject["Data"].ToObject<PriceListItem[]>();

   return priceListItems;
}

我有很多方法可以利用不同的资源 URL,但都具有相同的标头。如果我在客户端中只保留一个 Request 实例,我只能设置一次标头。这种方法好吗?我想避免任何代表和事件。

【问题讨论】:

    标签: c# rest client .net-4.5 restsharp


    【解决方案1】:

    你必须使用ParameterType.HttpHeader parameter:

    request.AddParameter("Authorization", "data", ParameterType.HttpHeader);
    

    【讨论】:

    • 服务器不需要填写请求头的“授权”属性。它只需要“SecureToken”并且在所有需要的请求类型上都可以正常工作。这对我每次创建 RestRequest 实例时都需要设置标头有任何帮助吗?和说 request.AddHeader("Authorization", "data") 有什么不同?
    【解决方案2】:
    1. 在客户端保存身份验证令牌是完全正常的,只要它是加密并且上面有过期时间。 您可以通过在您的 REST API 上实现会话来改进它,因此您只需要检查身份验证令牌是否仍然有效,如果它无效则进行身份验证。

    2. 显然你需要管理你向 REST API 请求的方式,我建议你使用 IDisposable Pattern 来实现这种方式,你可以使用一些惰性实现或 Singelton。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多