我正在使用web api并创建登录功能。(n层架构)。 我在登录控制器中收到空响应。
首先,我想确认我的代码逻辑是否正确,如果它是正确的,那么为什么我在
中获得响应null HttpResponseMessage response = client.GetAsync("api/Login/Login").Result;
我的项目UI登录控制器代码 LoginCOntroller.cs
[HttpPost]
public ActionResult Login(LoginViewModel loginViewModel)
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:63465/");
HttpResponseMessage response = client.GetAsync("api/Login/Login").Result;
if (response.IsSuccessStatusCode)
{
return RedirectToActionPermanent("Index", "Project");
}
return View(loginViewModel);
}
我的Api登录控制器代码 LoginController.cs
public HttpResponseMessage Login(LoginViewModel loginViewModel)
{
if (ModelState.IsValid)
{
UserEntity userEntity = new UserEntity();
userEntity.Email = loginViewModel.UserName;
userEntity.Password = loginViewModel.Password;
var login = new LoginManager().LoginAuthentication(userEntity);
if (login != null)
{
return Request.CreateResponse(login);
}
}
return Request.CreateResponse(true);
}
我的登录管理员课程 LoginManager.cs
public class LoginManager
{
public UserEntity LoginAuthentication(UserEntity userDetails)
{
var userDetail = new LoginDa().LoginAuthentication(userDetails);
return userDetail;
}
}
我的数据访问层 LoginDa.cs
public class LoginDa
{
public UserEntity LoginAuthentication(UserEntity login)
{
using (var context = new ArcomDbContext())
{
var loginDetail = context.userInformation.FirstOrDefault(p => p.Email == login.Email && p.Password == login.Password);
return loginDetail;
}
}
}
答案 0 :(得分:1)
GetAsync
方法只会在您的API上调用GET方法,因此如果您在API中使用[HttpPost]
(它应该是)为您的方法添加前缀,则需要调用{{1}的POST方法} class(例如 - HttpClient
)。
其次,您没有遵循PostAsJsonAsync
/ async
模式?您正在调用await
方法,但不会等待它。
此处有更多信息http://blog.stephencleary.com/2012/02/async-and-await.html。
以下所述内容是代码的外观
async
你还能用fiddler / Postman给你打电话吗?