当前位置: 首页 > 编程语言 > C#

FromBodyvalueisnull分享

时间:2023-04-10 22:33:30 C#

FromBodyvalueisnull这是Asp.NetWebform应用这是我Apicontroller中的POST方法publicvoidPost([FromBody]stringvalue){}我是小提琴。我做了这样一个实验。但事实并非如此。问题是什么。你能帮助我吗?我尝试过但失败了。publicvoidPost(MyViewModelmodel){stringaa=model.Value;}publicclassMyViewModel{publicstringValue{get;放;在Fiddler中:请求主体:Value=hakanFiddlerPOST主体负载应该是:=foo_bar而不是:value=foo_bar这只是WebAPI中模型绑定的一些奇怪的事情。如果你想在你的POST主体负载中支持value=foo_bar,你总是可以编写你的视图模型:publicclassMyViewModel{publicstringValue{get;放;}}然后让你的方法将这个视图模型作为参数:publicvoidPost(MyViewModelmodel){...workwithmodel.Valuehereasusual},还需要请求hack:Content-Type:application/x-www-form-urlencodedWebAPINullBug对于默认的Post()方法工作,来自Fiddler的POST数据必须看起来像这样我对WebAPI有类似的经历最近申请。该应用程序在我的测试环境中运行良好,但是当我们从构建服务器运行构建时,该应用程序无法反序列化对象并始终将[FromBody]之后的参数设置为null。根本原因是web.config和packages.config指定了Json.NET6.0.4,而bin中的NuGet包是10.0.3。模型绑定类似于从外面看起来像黑盒子的东西。特别是因为它可以悄悄地返回null而没有任何错误的迹象。在此测试对象序列化标题下的Microsoft页面上,有一个如何测试序列化和反序列化的示例:stringSerialize(MediaTypeFormatterformatter,Tvalue){//创建虚拟HTTP内容。流stream=newMemoryStream();varcontent=newStreamContent(stream);///序列化对象。格式化程序。WriteToStreamAsync(typeof(T),值,流,内容,空)。等待();//读取序列化字符串。溪流。位置=0;返回内容.ReadAsStringAsync().Result;}TDeserialize(MediaTypeFormatterformatter,stringstr)whereT:class{//将序列化的字符串写入内存流。流stream=newMemoryStream();StreamWriterwriter=newStreamWriter(stream);writer.Write(str);writer.Flush();stream.Position=0;//反序列化为T类型的对象returnformatter.ReadFromStreamAsync(typeof(T),stream,null,null)。结果为T;}//使用示例voidTestSerialization(){varvalue=newPerson(){Name="Alice",Age=23};varxml=newXmlMediaTypeFormatter();字符串str=Serialize(xml,值);varjson=newJsonMediaTypeFormatter();str=序列化(json,值);//往返Personperson2=Deserialize(json,str);当我将上述代码放入我的应用程序并运行它时,VisualStudio在序列化和反序列化函数中抛出异常。异常明显是加载Json.net6.0.4版本失败。这让我发现版本10.0.3在bin中而不是6.0.4。我在上下文菜单中单击项目并单击管理NuGet包...。然后删除并重新添加Json.netNuGet包。这样做会在bin中设置Json.netNuGet包,并使用匹配的版本号更新packages.config和web.config。以上就是C#学习教程的全部内容:FromBody值为null。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: