繁体   English   中英

你可以将一个匿名对象作为json发布到webapi方法,它是否将json对象的属性与webapi调用的参数相匹配?

[英]Can you post an anonymous object as json to a webapi method and it match the properties of the json object to the parameters of the webapi call?

我可以使用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

你不能像在那里那样去做。

如评论和本文中所述 ,您只能为方法使用一个 FromBody参数。 因此,这些参数中的一个或者都不会从您的JSON主体绑定。 如果它们中的任何一个,它可能是它试图绑定的guid,因为涉及的web api参数绑定规则

你怎么解决这个问题? 创建一个类,描述您的数据。

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
}

规定是它不会根据类型自动绑定,而是您在示例匿名类型中设置的名称。 variable1,variable2和variable3的名称必须在两个点都匹配。

当你考虑它时,那个看起来像JSON的匿名类型确实传递了一种对象,所以真的那就是你应该接受的东西。

深思熟虑:你如何能够区分一个简单的“字符串”和一个具有奇异字符串的对象,如var jsonvariable = new { variable1:"somestring"}; 你基本上不可能,这两个可能不应该是等同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM