1

更新:我下载了 Ramone 项目,将其添加到我的项目中,然后使用调试器再次运行该应用程序。错误如下所示:

公共 MediaTypeWriterRegistration GetWriter(Type t, MediaType mediaType) { ...

CodecEntry entry = SelectWriters(t, mediaType).FirstOrDefault(); => 这一行抛出错误

... } CodecManager.cs 中发生错误。我试图弄清楚为什么它不能识别 json-patch 媒体类型。可能是因为作者没有正确注册吗?我正在调查它。如果您发现问题,请告诉我。由于您是该库的作者,因此您更容易找出问题所在。我将不得不通过所有的代码文件和方法来找到问题。谢谢!

我很高兴知道 Ramone 库支持 json-patch 操作,但是当我尝试它时,出现以下错误:

415-不支持的媒体类型

这与我使用 RestSharp 时遇到的错误相同。我想可能是 RestSharp 不支持 json-patch 和错误,所以我决定尝试 Ramone lib,但我仍然得到同样的错误。Endpoint 没有问题,因为当我使用 Postman 尝试相同的命令时,它可以工作,但是当我在 C# 中以编程方式尝试它时,它会引发不受支持的媒体类型错误。这是我的代码:

var authenticator = new TokenProvider("gfdsfdsfdsafdsafsadfsdrj5o97jgvegh", "sadfdsafdsafdsfgfdhgfhehrerhgJ");

JsonPatchDocument patch = new JsonPatchDocument<MetaData>();
patch.Add("/Resident2", "Boyle");
//patch.Replace("/Resident", "Boyle");

RSession = RamoneConfiguration.NewSession(new Uri("https://api.box.com"));
RSession.DefaultRequestMediaType = MediaType.ApplicationJson;
RSession.DefaultResponseMediaType = MediaType.ApplicationJson;

Ramone.Request ramonerequest = RSession.Bind("/2.0/files/323433290812/metadata");

ramonerequest.Header("Authorization", "Bearer " + authenticator.GetAccessToken(code).AccessToken);
//var ramoneresponse = ramonerequest.Patch(patch); //results in error: 405 - Method Not Allowed
var ramoneresponse = ramonerequest.Put(patch); //results in error: 415 - Unsupported Media Type

var responsebody = ramoneresponse.Body

端点信息可在此处获得:http: //developers.box.com/metadata-api

我在以下文章中使用了 json-patch 部分作为参考:

http://elfisk.dk/Ramone/Documentation/Ramone.pdf

顺便说一句,我尝试了 Patch() 方法(如上面的参考文章所示),但导致“方法不允许”,所以我使用了 Put() 方法,该方法似乎有效,但由于 json-patch 操作而出错。

任何解决此问题的帮助、指导和提示将不胜感激。提前非常感谢。

-假

4

1 回答 1

0

Box 文档说您应该使用 PUT(这很有趣)。服务器甚至告诉您它不支持 HTTP PATCH 方法(不允许使用 405 方法) - 所以它必须是 PUT。

现在,您告诉 Ramone 一直使用 JSON (RSession.DefaultRequestMediaType = MediaType.ApplicationJson),因此您最终将 JSON 文档放入 Box - 您应该将 JSON-Patch 文档放入其中。

删除“RSession.DefaultRequestMediaType = MediaType.ApplicationJson”语句并使用以下命令将补丁文档作为 JSON-Patch 发送:ramonerequest.ContentType("application/json-patch+json").Put(...)。

于 2014-01-28T00:29:03.547 回答