在Ramone中使用json-patch时出现不支持的媒体类型错误

时间:2014-01-27 08:04:45

标签: c# json rest-client json-patch

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

public 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但我仍然得到同样的错误。端点没有问题,因为当我使用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错误了操作

任何有关解决此问题的帮助,指导和提示都将受到高度赞赏。非常感谢。

-Sham

1 个答案:

答案 0 :(得分:0)

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

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

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