更新:我下载了Ramone项目,将其添加到我的项目中,然后使用调试器再次运行应用程序。错误如下所示:
公共MediaTypeWriterRegistration GetWriter(类型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()方法(如上面的ref。文章),但这导致了“方法不允许”,所以我使用了Put()方法,该方法似乎可以工作,但由于json-patch操作而出错。
任何关于解决这个问题的帮助、指导和提示都将受到高度赞赏。提前谢谢你。
-Sham
发布于 2014-01-28 08:29:04
Box文档说你应该使用PUT (这很有趣)。服务器甚至告诉您它不支持HTTP PATCH方法(不允许使用405方法)-所以必须这样做。
删除“JSON= patch”语句,并使用: ramonerequest.ContentType("application/json-patch+json").Put(...).将补丁文档作为RSession.DefaultRequestMediaType-MediaType.ApplicationJson发送
https://stackoverflow.com/questions/21375691
复制相似问题