DRo*_*rtE 5 c# json anonymous-types asp.net-web-api asp.net-web-api2
我可以使用webapi方法吗?
[Route("someroute")]
public void SomeMethod(string variable1, int variable2, Guid variable3)
{
//... Code here
}
Run Code Online (Sandbox Code Playgroud)
简单的json
var jsonvariable = new {
variable1:"somestring",
variable2:3,
variable3: {9E57402D-8EF8-45DE-B981-B8EC201D3D8E}
}
Run Code Online (Sandbox Code Playgroud)
然后发帖子
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
Run Code Online (Sandbox Code Playgroud)
来自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
Run Code Online (Sandbox Code Playgroud)
你不能完全像你在那里那样去做。
正如评论和本文中所述,您的方法只能使用一个FromBody 参数。因此,这些参数之一或都不与您的 JSON 正文绑定。如果有的话,它可能只是因为涉及到Web api 参数绑定规则而尝试绑定的 guid 。
你如何解决这个问题?创建一个类来描述您的数据。
public class SomeBodyParameters
{
public string variable1 { get; set; }
public int variable2 { get; set; }
public Guid variable3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
那么你的 api 方法将如下所示:
[Route("someroute")]
public void SomeMethod([FromBody]SomeBodyParameters parameters)
{
//... Code here
}
Run Code Online (Sandbox Code Playgroud)
规定是它不会根据类型自动绑定,而是根据您在示例匿名类型中设置的名称进行绑定。变量 1、变量 2 和变量 3 的名称必须在两个位置都匹配。
当您考虑一下时,看起来像 JSON 的匿名类型实际上正在传递一种对象,因此实际上这就是您应该接受的。
思考:如何区分简单的“字符串”和具有单个字符串(如 )的对象var jsonvariable = new { variable1:"somestring"};?你基本上不能,而且两者可能不应该是等价的。
| 归档时间: |
|
| 查看次数: |
5526 次 |
| 最近记录: |