我有一个 C# Azure应用程序,我的解决方案中有两个网站。一个是用户点击的外向网站,另一个是网站用来创建用户的API等。
在第二个项目(API项目)中,我使用代码构建了一个Register
方法:
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(UserModel userModel)
{
if (!ModelState.IsValid) {
return BadRequest(ModelState);
}
IdentityResult result = await _repo.RegisterUser(userModel);
IHttpActionResult errorResult = GetErrorResult(result);
if (errorResult != null) {
return errorResult;
}
return Ok();
}
这通过URL调用时效果很好,当我通过网站项目中的javascript调用它时效果很好。
但是,我现在想从网站项目的服务器端调用此方法,但是当我使用代码时:
SecondProject.API.Controllers.AccountController UserApiController = new SecondProject.API.Controllers.AccountController();
UserApiController.Register(UserApiModel);
visual studio警告我应该使用await
。
所以,如果我添加:
await UserApiController.Register(UserApiModel);
visual studio告诉我await
运算符只能用于异步方法。
如何通过服务器代码从我的第一个项目调用Register
SecondProject.API
方法
答案 0 :(得分:1)
您需要将调用方法声明为async
。
public async Task CallingMethod()
{
//...
SecondProject.API.Controllers.AccountController UserApiController = new SecondProject.API.Controllers.AccountController();
await UserApiController.Register(UserApiModel);
//...
}
编辑:
在说,你不应该在代码中创建控制器和调用方法。您应该使用存储库,就像在控制器方法中一样。
public async Task CallingMethod()
{
//...
IdentityResult result = await _repo.RegisterUser(userModel);
//Do something with the result
//...
}