我在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
}
}
非常感谢你的帮助
答案 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
}