如何从另一个项目中调用async Task <ihttpactionresult>类型的方法?</ihttpactionresult>

时间:2014-09-10 02:33:21

标签: c# asp.net-mvc api azure

我有一个 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方法

1 个答案:

答案 0 :(得分:1)

您需要将调用方法声明为async

Official documentation

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
    //...
}