【问题标题】:Can't send patch request to Lotus Domino server无法向 Lotus Domino 服务器发送补丁请求
【发布时间】:2016-09-12 08:24:05
【问题描述】:

我正在尝试在 Domino 服务器上使用 REST Api,如下所述:Document patch

当我通过Postman 发送请求时,一切正常,但是当我尝试通过RestSharp 以编程方式发出相同的请求时,错误415 Unsupported Media Type

  • 这是我用来发送请求的 vb.net 代码:

    Function Execute(request As RestRequest) As RestResponse
            Dim client As New RestClient(baseUrl)
            request.AddHeader("Content-Type", "application/json")
            request.AddHeader("Accept", "application/json")
    
    Dim response = client.Execute(request)
    
    If response.StatusCode <> 200 Then
        Throw New ApplicationException(response.StatusDescription)
    End If
    
    If response.ErrorException IsNot Nothing Then
        Throw New ApplicationException("Error retrieving response.  Check inner details for more info.", response.ErrorException)
    End If
    
      Return response
    End Function
    
    Public Sub SetState(DocUNID As String, state As String)
     Dim request = New RestRequest()
     request.Method = Method.PATCH
     request.Resource = "api/data/documents/unid/{DocUNID}"
     request.AddParameter("EMPCARDSTATE", state)
     Execute(request)
    End Sub
    
  • 这是我的邮递员截图:

【问题讨论】:

  • 您是否为服务器启用了 PATCH 方法?我相信它可能默认被禁用。

标签: vb.net lotus-notes lotus-domino restsharp lotus


【解决方案1】:

当您发送 PATCH 请求并且 Content-Type 标头值为 not application/json 时,数据服务返回 415。我对 vb.net 不熟悉,但我只能得出这样的结论:此语句没有按预期工作:

request.AddHeader("Content-Type", "application/json")

这句话在我看来也是错误的:

request.AddParameter("EMPCARDSTATE", state)

您想将 JSON 对象写入请求的正文。我认为您打算在 JSON 对象中包含一个“EMPCARDSTATE”属性。 request.AddParameter() 真的设置了请求的正文吗?

我建议您更改代码以正确设置请求正文。这可能就是您解决问题所需的全部内容。如果您仍然看到 415 错误,您可以使用 Fiddler(或类似工具)检查 Content-Type 标头和正文的请求。

【讨论】:

  • 感谢您的回答,但问题出在 RestShart 本身,请参阅上面的回答。
【解决方案2】:

看起来问题在于 POST/PATCH 与 GET 的 RestSharp 实现。当我按照...{PARAMETER} 在url 中发送带有参数模板的POST/PATCH 时,它抛出了一个异常。如果我在使用它之前连接 url,一切正常。

【讨论】:

  • 可以通过包含使其工作的代码更改来改进此答案。此外,原始帖子说 REST API 返回 415。这个答案说 RestSharp 正在引发异常。这对我来说似乎是一个不同的问题。
  • 你说得对,我明天将包含代码。关于答案,我明天会改进它,实际上这不是我的问题,我只是试图帮助我没有 SO 帐户的同事,但他自己发现了答案。我只是坚持不要删除答案,因为它可能会为其他人节省很多时间。
猜你喜欢
  • 2022-01-10
  • 2016-07-03
  • 2017-08-21
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多