【问题标题】:Getting 'Access denied' when calling REST service调用 REST 服务时出现“拒绝访问”
【发布时间】:2015-01-22 20:53:42
【问题描述】:

我正在构建一个使用 REST 服务的小应用程序。

REST 服务期望我与之交互的 URL 始终将 API 密钥作为 URL 参数。

所以无论我是 GET、POST、UPDATE 还是 DELETE,我的 URL 都应该包含这样的内容:

https://rest.service.tld:443/list?api_key=MY-KEY

https://rest.service.tld:443/lists/1/profiles/search?api_key=MY-KEY

我尝试使用来自 RestSharp 网页的示例代码,但它得到了状态码 Access Denied

这是我的代码:

  // Create client
  var client = new RestClient( "https://rest.service.tld:443" );
  client.Authenticator = new SimpleAuthenticator( "api_key", "MY-KEY", "", "" );

  // GET list of items
  var requestLists = new RestRequest( "lists", Method.GET );
  IRestResponse<List<ListResponse>> listResponse = client.Execute<List<ListResponse>>( requestLists ); // Returns the correct list

  // POST search
  var requestProfiles = new RestRequest( "lists/1/profiles/search", Method.POST );
  requestProfiles.AddParameter( "Criteria", "{\"email\":\my@email.tld\"}" );

  IRestResponse profileResponse = client.Execute( requestProfiles ); // Returns 'Access Denied' status code 

据我所知,POST 方法不包含正确的查询字符串,而是将我的api_key 作为参数添加到POST 中。

有没有办法像我需要的那样将我的API_KEY 保留在查询字符串中?

【问题讨论】:

    标签: rest restsharp


    【解决方案1】:

    默认情况下,api_key 是作为普通参数添加的,您需要通过如下设置 ParameterType 来明确强制您希望将参数嵌入到 URL 中:

    var requestProfiles = new RestRequest( "lists/1/profiles/search{api_key}", Method.POST );
    
    requestProfiles.AddParameter( "Criteria", "{\"email\":\my@email.tld\"}" );
    
    requestProfiles.AddParameter( "api_key", MY-KEY, ParameterType.UrlSegment);
    

    更多信息here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多