当我尝试使用Windows Forms Client将值传递给我的Web API时:
SessionModel s = new SessionModel()
{
SessionID = "123456"
};
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:49584/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", txtToken.Text.Trim());
try
{
HttpResponseMessage response = await client.PostAsJsonAsync("api/account/depositaccounts", s);
response.EnsureSuccessStatusCode(); // Throw if not a success code.
if (response.IsSuccessStatusCode)
{
MessageBox.Show("Results", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (HttpRequestException ex)
{
MessageBox.Show(ex.Message);
}
}
API控制器代码是这样的:
[HttpPost]
[Authorize]
[Route("DepositAccounts", Name = "DepositAccounts")]
public HttpResponseMessage GetDepositAccounts(Models.AuthenticationBindingModel model)
{
var sessionId = model.SessionID;
}
当模型进入时,SessionID属性为null。我确认在客户端不是null。
另一方面,当使用Fiddler创建Json请求时,它可以工作。我在客户端丢失了什么吗?
感谢。
**编辑:在客户端将属性'SessionId'更改为'SessionID'。同样的问题。
答案 0 :(得分:0)
将API签名更改为GetDepositAccounts(dynamic model)
或在客户端和服务器端使用相同的类。
答案 1 :(得分:0)
显然在客户端,我用这样的构造函数声明我的类:
class SessionModel
{
public SessionModel()
{
}
public String SessionId { get; set; }
}
它导致一些额外的数据被添加到json请求中的字段('k__BackingField')。虽然有很多关于如何从响应中删除它的文章,但我无法弄清楚如何从请求中删除它。结果是在客户端声明了类,而没有构造函数删除'k__BackingField'文本然后请求工作。
class SessionModel
{
public String SessionID { get; set; }
}
不确定这背后的原因,只是它发生了。如果有人想评论'为什么'那会很棒!