8

这是 Asp.Net Webform 应用程序
这是我在 Apicontroller 中的 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
4

4 回答 4

20

Fiddler 中的 POST 正文有效负载应为:

=foo_bar

代替:

value=foo_bar

这只是 Web API 中模型绑定的奇怪之处之一。如果您想value=foo_bar在 POST 正文有效负载中提供支持,您总是可以编写一个视图模型:

public class MyViewModel
{
    public string Value { get; set; }
}

然后让您的方法将此视图模型作为参数:

public void Post(MyViewModel model)
{
    ... work with model.Value here as usual
}
于 2013-05-30T13:48:44.207 回答
10

我遇到了这个问题,解决方法是:
要适合Request Body格式=foo_bar,
还需要Request haders:

Content-Type: application/x-www-form-urlencoded
于 2013-08-29T09:49:45.043 回答
0

Web API 空错误

为了使默认的 Post() 方法起作用,来自 Fiddler 的 POST 数据必须如下所示

于 2015-10-29T06:39:35.763 回答
0

我最近对 ​​WebAPI 应用程序有过类似的体验。该应用程序在我的测试环境中运行正常,但是当我们从构建服务器运行构建时,应用程序无法反序列化对象并且始终将 [FromBody] 后面的参数设置为 null。

根本原因是 web.config 和 packages.config 指定了 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 版本在 bin 而不是 6.0.4 中。我右键单击项目,在上下文菜单中单击管理 NuGet 包...。然后删除并重新添加了 Json.net NuGet 包。这样做会在 bin 中设置 Json.net NuGet 包,并使用匹配的版本号更新 packages.config 和 web.config。

于 2018-01-10T20:21:19.317 回答