用于电子邮件传递的Web Api

时间:2013-09-02 20:23:56

标签: asp.net-mvc-4 asp.net-web-api

我在ASP.NET MVC 4网站中创建了一个Web API控制器,专门发送电子邮件,以便我可以将其用于此目的,并最终将其提供给其他消费者(移动等)。

一切正常,但我想异步使用它,尽管它没有那样工作,我的网站会阻塞,直到工作完成。

我有一个常规的Controller,我调用一个调用API的辅助类。

控制器代码:

[HttpPost]
public async Task<ActionResult> ContactUs(ContactUsModel model)
{
    ExternalApiCalls extApi = new ExternalApiCalls();
    await extApi.PostContactUs(model).ConfigureAwait(false);

    return RedirectToAction("ContactUsSuccess", "Account");
}

助手类代码:

public class ExternalApiCalls
{
    public HttpClient client { get; set; }
    public ExternalApiCalls()
    {
        client = new HttpClient();

        client.BaseAddress = new Uri("http://localhost:10239/");
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
    }

    public async Task PostContactUs(ContactUsModel model)
    {
        try
        {
            var response = await client.PostAsJsonAsync("api/WAPIMail",    model).ConfigureAwait(false);

        }
        catch (HttpRequestException ex)
        {
        }
        catch (System.FormatException)
        {
        }
        finally
        {
        }
    }
}

Web API Controller:

public class WAPIMailController : ApiController
{
    public void PostContactUs(ContactUsModel model)
    {              
        // Send Email Here
    }
}

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

我终于设法做了..

为了简洁起见,我显示的是过于简化的代码,见下文:

控制器:

    [HttpPost]
    public ActionResult ContactUs(ContactUsModel model)
    {
        new ExternalApiCalls().MailContactUs(model); 
        return RedirectToAction("ContactUsSuccess", "Account");
    }

助手类:

    public void MailContactUs(ContactUsModel model)
    {
        client.PostAsJsonAsync("api/WAPIMail/MailContactUs", model).ConfigureAwait(false);
    }

Web API控制器:

    [HttpPost]
    public void MailContactUs(ContactUsModel model)
    {
        //Email Logic Here
    }