Nul*_*nce 4 .net asp.net-mvc json web-services asp.net-web-api
我的web api中有以下方法
public class AccessPanelController : ApiController
{
public HttpResponseMessage PostGrantAccess([FromUri]GrantAccessRequest grantAccessRequest)
{
var deviceId = grantAccessRequest.DeviceId;
var grantAccessResponse = new GrantAccessResponse()
{
Status = "OK"
};
var response = Request.CreateResponse<GrantAccessResponse>(HttpStatusCode.OK, grantAccessResponse);
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
GrantAccessRequest类:
public class GrantAccessRequest
{
public string DeviceId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
客户:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:55208/");
// Add an Accept header for JSON format.
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
Uri uri = null;
var request = new GrantAccessRequest { DeviceId = "bla" };
var response = client.PostAsJsonAsync("api/accesspanel", uri).Result;
if (response.IsSuccessStatusCode)
{
uri = response.Headers.Location;
}
Run Code Online (Sandbox Code Playgroud)
在我的PostGrantAccess方法中,grantAccessRequest构造,但是DeviceId为null
摆脱[FromUri]控制器操作的属性.同样在客户端上,您似乎没有对request包含有效负载的变量执行任何操作:
public HttpResponseMessage PostGrantAccess(GrantAccessRequest grantAccessRequest)
Run Code Online (Sandbox Code Playgroud)
为了更好地理解模型绑定在Web API中的工作原理,我建议您阅读following article.
所以:
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:55208/");
var request = new GrantAccessRequest { DeviceId = "bla" };
var response = client.PostAsJsonAsync("api/accesspanel", request).Result;
if (response.IsSuccessStatusCode)
{
var uri = response.Headers.Location;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,Accept在这种情况下您不需要设置请求标头,因为您正在使用该PostAsJsonAsync方法.
此外,我不知道你的问题是否这是一个拼写错误,但你似乎已经指定api/accesspanel为url而你的控制器动作被调用GrantAccessRequest.
| 归档时间: |
|
| 查看次数: |
2312 次 |
| 最近记录: |