我可以使用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
答案 0 :(得分:1)
你不能像在那里那样去做。
正如评论和in this article中所述,您只能为方法使用一个 FromBody参数。因此,这些参数中的一个或者都不会从您的JSON主体绑定。如果它们中的任何一个,它可能只是由于涉及web api parameter binding rules而试图绑定的guid。
你如何解决这个问题?创建一个类,描述数据的方式。
public class SomeBodyParameters
{
public string variable1 { get; set; }
public int variable2 { get; set; }
public Guid variable3 { get; set; }
}
然后你的api方法看起来像这样:
[Route("someroute")]
public void SomeMethod([FromBody]SomeBodyParameters parameters)
{
//... Code here
}
规定是它不会根据类型自动绑定,而是您在示例匿名类型中设置的名称。变量1,变量2和变量3的名称必须在两个位置都匹配。
当你考虑它时,那个看起来像JSON的匿名类型确实传递了一种对象,所以真的那就是你应该接受的东西。
深思熟虑:您如何区分简单的“字符串”和具有var jsonvariable = new { variable1:"somestring"};
这样的单一字符串的对象?你基本上不可能,这两个可能不应该是等同的。