【问题标题】:call to async Controller method from Web ApiController async controller method从 Web ApiController 异步控制器方法调用异步控制器方法
【发布时间】:2017-05-19 19:19:43
【问题描述】:

我有以下控制器方法

public class EmailController : Controller
{
    public async Task<ActionResult> SendEmail(UserData user)
    { 
        ...

        return View(user);
    }
}

我正在尝试调用上面的SendEmail 方法并在下面的 webapi 控制器方法中发送sampleData 对象

[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{

    // POST api/Account/Register
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {

        // Email Sending
        UserData sampleData = new UserData();
        sampleData.Id = user.Id;
        sampleData.UserName = user.UserName;
        sampleData.UserEmail = user.Email;
        sampleData.FirstName = user.FirstName;
        sampleData.Password = model.Password;

        //Call to Async Controller method
        var emailSend = await EmailController.Sendemail(sampleData);
    }
}

我怎样才能正确地做到这一点

【问题讨论】:

  • 请向我们展示您的项目结构!
  • 您在问如何发送电子邮件吗?如果是这样,请查看 SmtpClient 类。大概需要3行代码

标签: c# model-view-controller asp.net-web-api controller


【解决方案1】:

EmailController 上的SendEmail 方法是ActionResult,因此它应该只关心执行必要的逻辑来更新视图。任何发送电子邮件的业务逻辑都应该封装在单独的层中,可以从视图控制器和 API 控制器调用。

【讨论】:

  • 其实我并不担心分层方法只想在操作方法下发送电子邮件,因为它在 apicontroller 方法下不起作用我将它移到了控制器方法
猜你喜欢
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多