FromBody value get null
本文关键字:null get value FromBody | 更新日期: 2023-09-27 18:15:59
Net Webform应用程序
这是我在apiconcontroller中的POST方法
public void Post([FromBody]string value)
{
}
我是小提琴手后处理。
我做了这样的实验。但它没有。
有什么问题?
你能帮忙吗?
我试过了,我失败了。
public void Post(MyViewModel model)
{
string aa = model.Value;
}
public class MyViewModel
{
public string Value { get; set; }
}
在小提琴手:Request Body:
Value=hakan
Fiddler中的POST body payload应该是:
=foo_bar
代替:
value=foo_bar
这只是Web API中模型绑定的奇怪之处之一。如果你想在POST主体负载中支持value=foo_bar
,你可以编写一个视图模型:
public class MyViewModel
{
public string Value { get; set; }
}
,然后让你的方法把这个视图模型作为参数:
public void Post(MyViewModel model)
{
... work with model.Value here as usual
}
我遇到这个问题,解决方案是:
请求正文格式=foo_bar,
还需要请求处理程序:
Content-Type: application/x-www-form-urlencoded
Web API Null Bug
要使默认的Post()方法工作,来自Fiddler的Post数据必须如下所示
我最近在一个WebAPI应用程序上也有过类似的经历。应用程序在我的测试环境中一直正常工作,但是当我们在构建服务器上运行构建时,应用程序无法反序列化对象,并且始终将[FromBody]后面的参数设置为null。
根本原因是网络。配置和包。配置指定Json。. NET 6.0.4和bin中的NuGet包是10.0.3。
模型绑定起初从外部看起来有点像一个黑盒。特别是因为它可以悄悄地返回一个空,而没有指示什么是错误的。在这个Microsoft页面的测试对象序列化标题下,有一个如何测试序列化和反序列化的示例:
string Serialize<T>(MediaTypeFormatter formatter, T value)
{
// Create a dummy HTTP Content.
Stream stream = new MemoryStream();
var content = new StreamContent(stream);
/// Serialize the object.
formatter.WriteToStreamAsync(typeof(T), value, stream, content, null).Wait();
// Read the serialized string.
stream.Position = 0;
return content.ReadAsStringAsync().Result;
}
T Deserialize<T>(MediaTypeFormatter formatter, string str) where T : class
{
// Write the serialized string to a memory stream.
Stream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(str);
writer.Flush();
stream.Position = 0;
// Deserialize to an object of type T
return formatter.ReadFromStreamAsync(typeof(T), stream, null, null).Result as T;
}
// Example of use
void TestSerialization()
{
var value = new Person() { Name = "Alice", Age = 23 };
var xml = new XmlMediaTypeFormatter();
string str = Serialize(xml, value);
var json = new JsonMediaTypeFormatter();
str = Serialize(json, value);
// Round trip
Person person2 = Deserialize<Person>(json, str);
}
当我把上面的代码放到我的应用程序中并运行它时,Visual Studio在序列化和反序列化函数中都抛出了一个异常。异常清楚地表明,加载Json.net 6.0.4版本失败了。这让我发现版本是10.0.3而不是6.0.4。我右键点击项目,点击管理NuGet包…在上下文菜单中。然后删除并重新添加了Json.net NuGet包。这样做可以在bin中设置Json.net NuGet包并更新包。配置和web。