在Method.Put上出现RestSharp奇怪的错误

时间:2015-11-05 11:30:13

标签: c# api restsharp

我正在尝试使用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: - /

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

问题在于新实例的反斜杠。只需从/{id}中删除反斜杠即可,