0

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

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

我有一个常规控制器,我在其中调用一个调用 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 控制器:

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

非常感谢你的帮助

4

1 回答 1

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
    }
于 2013-09-04T20:47:22.990 回答