【发布时间】:2014-08-04 12:05:16
【问题描述】:
我可以有一个 webapi 方法
[Route("someroute")]
public void SomeMethod(string variable1, int variable2, Guid variable3)
{
//... Code here
}
简单的json
var jsonvariable = new {
variable1:"somestring",
variable2:3,
variable3: {9E57402D-8EF8-45DE-B981-B8EC201D3D8E}
}
然后发帖
HttpClient client = new HttpClient { BaseAddress = new Uri(ConfigurationManager.AppSettings["SomeURL"]) };
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.PostAsJsonAsync("someroute", jsonvariable ).Result
来自 javascript,我可以做这样的事情,它可以解决各个属性,但我似乎无法通过 C# 调用来做到这一点
var postData = {
appUniqueId: appUniqueId
};
$http
.post('someurl', postData)
.success(function(response) {
defer.resolve(response.data);
});
webapi method
SomeWebMethod(Guid appUniqueId) <-- same name as in postdata
【问题讨论】:
-
一方面,如果您的 jsonvariable 代码应该是 C#,那么您的语法是错误的。向我们展示您尝试使用的确切代码以及您获得的结果。
-
对不起。我忘记了上的“新”关键字
-
我是理论,这应该是可能的。可能导致它失败的原因是缺少标头或格式错误的请求。我建议启动 Fiddler,双向发出请求,并比较原始请求。这应该可以帮助您入门。
-
这是一个与此问题相关的更深入的问题。我试图发布一个缩写版本来试图得到答案。似乎没有使用“模型”进行模型绑定,这可能是框架限制stackoverflow.com/questions/24212152/…
-
您的答案在上一个问题中。您应该阅读 Stephan 在他的回答中链接的文章。 asp.net/web-api/overview/formats-and-model-binding/… 特别是这一行:“最多允许从消息正文中读取一个参数......此规则的原因是请求正文可能存储在只能读取一次的非缓冲流中。”
标签: c# json asp.net-web-api anonymous-types asp.net-web-api2