【问题标题】:RestSharp weird error on Method.PutMethod.Put 上的 RestSharp 奇怪错误
【发布时间】:2016-03-01 17:00:42
【问题描述】:

我正在尝试使用 RestSharp 更新资源。该 API 运行良好,因为在另一个应用程序中使用,所以这排除了一些路由问题或任何问题在我这边而不是在 API 上。

无论如何。我目前的情况是我想更新位于host/api/resource/id的特定资源

这是我当前在DataProvider 层中的代码

public override bool Update(string resource, Dictionary<string, object> properties)
{
    this.request = new RestRequest(resource + "/{id}", Method.PUT);

    for (int i = 0; i < properties.Count; ++i)
    {
        KeyValuePair<string, object> kvp = properties.ElementAt(i);
        if (kvp.Key != "id")
            this.request.AddParameter(kvp.Key, kvp.Value, ParameterType.GetOrPost);
        else
            this.request.AddParameter(kvp.Key, kvp.Value, ParameterType.UrlSegment);
    }

    var response = this.CallApi();
    // ... other stuff
}

此代码只是根据该方法从外部接收到的字典创建请求和正确的参数,然后它调用CallApi() 方法就是这样

private IRestResponse CallApi()
{
    var client = new RestClient(BaseUrl);
    var response = client.Execute(this.request);

    if(response.ErrorException != null)
    {
        // Response has some error!
        // ... other stuff
    }

    if(response.StatusCode != System.Net.HttpStatusCode.OK)
    {
        // Response received something different from HTTP status code OK
        // ... other stuff
    }

    return response;
}

CallApi 非常适合所有其他调用,例如 GET、POST、DELETE 甚至 PATCH,但是当我尝试将它与 Update 一起使用并因此使用 PUT 时,从 client.Execute(this.request) 收到的响应是 405 Method Not Allowed。

经过一点调试,我发现响应有一个ResponseUri,只有host 字符串而不是host/api/resource/id,这似乎是由

this.request = new RestRequest(resource + "/{id}", Method.PUT);

事实上,如果我删除 /{id} 部分,RequestUri 的正确形式是 host/api/resource,当然没有 id,反正这是错误的,因为我需要 id :-/

有人知道为什么会这样吗?

【问题讨论】:

    标签: c# api restsharp


    【解决方案1】:

    问题出在新实例的反斜杠上。只需从/{id} 中删除反斜杠,它就可以工作了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多