传递给 Web API 的模型为空
本文关键字:模型 API Web | 更新日期: 2023-09-27 18:35:20
用户输入他/她的登录详细信息后,我的控制器中有以下代码行
var userProfile = UserService.UserLogin(userLogin);
它调用一个静态类,在调用外部 Web API 时引用该类
public static UserProfile UserLogin(UserLogin userLogin)
{
var client = new RestClient(Url);
var request = new RestRequest("api/UserLoginApi/", Method.GET) { RequestFormat = DataFormat.Json };
request.AddBody(userLogin);
var response = client.Execute(request);
var userProfile = JsonConvert.DeserializeObjectAsync<UserProfile>(response.Content).Result;
return userProfile;
}
上面调用这个Web Api没有问题,我可以达到断点集
public UserProfile Get([FromBody] UserLogin userLogin)
{
UserProfile userProfile;
return userProfile;
}
但是当我在 Web API 中检查用户登录中的值时,它们是空的?
现在逐步通过控制器,userLogin具有我输入的电子邮件地址和密码,再次进入UserService.Login,当它到达
var response = client.Execute(request);
我展开请求并看到参数计数为 1,但是当它遇到我的 Web API GET 中的断点时,用户登录为空?
我也在UserService.Login中尝试过这个
request.AddBody(new UserLogin
{
EmailAddress = userLogin.EmailAddress,
Password = userLogin.Password
});
但又一次没有运气,我在这里做错了什么?
我建议当你使用FromBody时,你必须使用Post方法来发送数据。
var request = new RestRequest("api/UserLoginApi/", Method.POST) { RequestFormat = DataFormat.Json };
根据您的方法。
public UserProfile Get([FromBody] UserLogin userLogin)
{
UserProfile userProfile;
return userProfile;
}
您的控制器操作是 Get 方法,当您使用 Url api/UserLoginApi/和 Get 方法请求时,它将调用上述方法,如果您按照我的建议更改帖子,您还必须更改控制器方法名称如果您不想这样做,请像这样更新控制器操作。
public UserProfile Get([FromUri] UserLogin userLogin)
{
UserProfile userProfile;
return userProfile;
}
呼叫 与以下事情。
public static UserProfile UserLogin(UserLogin userLogin)
{
var client = new RestClient(Url);
var request = new RestRequest("api/UserLoginApi/", Method.GET) { RequestFormat = DataFormat.Json };
request.AddQueryParameter("EmailAddress", userLogin.EmailAddress);
request.AddQueryParameter("Password", userLogin.Password);
var response = client.Execute(request);
var userProfile = JsonConvert.DeserializeObjectAsync<UserProfile>response.Content).Result;
return userProfile;
}
如果您决定使用Post方法,则使控制器操作类似
public UserProfile Post([FromBody] UserLogin userLogin)
{
UserProfile userProfile;
return userProfile;
}
你应该这样打电话。
public static UserProfile UserLogin(UserLogin userLogin)
{
var client = new RestClient(Url);
var request = new RestRequest("api/UserLoginApi/", Method.POST) { RequestFormat = DataFormat.Json };
request.AddBody(userLogin);
var response = client.Execute(request);
var userProfile = JsonConvert.DeserializeObjectAsync<UserProfile>(response.Content).Result;
return userProfile;
}