调用REST服务时获取“拒绝访问”

时间:2014-10-15 06:54:13

标签: rest restsharp

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

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

所以无论我是GET,POST,UPDATE还是DELETE,我的网址应该总是包含这样的内容:

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保持在Querystring中,就像我需要它一样?

1 个答案:

答案 0 :(得分:0)

默认情况下,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