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

FromBody value get null

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。