这是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; }
}
在Fiddler:
Request Body:
Value=hakan
答案 0 :(得分:20)
Fiddler中的POST正文有效负载应为:
=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
}
答案 1 :(得分:10)
我遇到了这个问题,解决方案是:
适合Request Body格式= foo_bar,
还需要请求黑客:
Content-Type: application/x-www-form-urlencoded
答案 2 :(得分:0)
要使默认的Post()方法起作用,来自Fiddler的POST数据必须如下所示
答案 3 :(得分:0)
我最近在WebAPI应用程序方面有过类似的经历。应用程序在我的测试环境中运行正常,但是当我们从构建服务器运行构建时,应用程序无法反序列化对象,并始终将[FromBody]之后的参数设置为null。
根本原因是web.config和packages.config指定了Json.NET 6.0.4,bin中的NuGet包是10.0.3。
模型绑定类型首先看起来像是从外面看的黑盒子。特别是因为它可以安静地返回null而没有指示什么是错误的。在测试对象序列化标题下的Microsoft page下,有一个如何测试序列化和反序列化的示例:
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在serialize和deserialize函数中引发了异常。例外情况明确指出,加载Json.net版本6.0.4失败了。这让我发现版本10.0.3在bin而不是6.0.4。我在上下文菜单中点击了项目点击管理NuGet包...。然后删除并重新添加Json.net NuGet包。这样做可以在bin中设置Json.net NuGet包,并使用匹配的版本号更新packages.config和web.config。