0

ASP.NET MVC 4 Web サイト内に 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 に答える