如何调用位于同一服务器上部署的另一个项目上的控制器功能?

时间:2018-03-30 17:27:34

标签: c# asp.net-mvc iis controller

我需要能够从外部网站发送自动电子邮件,我们应该使用此功能来执行另一个项目。

public class EmailController : ApiController
{
    [HttpPost]
    public void Send(SendMailModel mailObj)
    {
        MailMessage mail = new MailMessage();
        mail.From = new MailAddress(System.Configuration.ConfigurationManager.AppSettings["senderEmail"], mailObj.SendingApp);
        mail.To.Add(new MailAddress(mailObj.SendTo));
        mail.Subject = mailObj.Subject;
        mail.Body = mailObj.Body;
        // more code
    }
}

此电子邮件控制器位于以下网站:services.domain.dev,我们的项目部署在project.domain.dev上。我应该怎么称呼它发送电子邮件?我正在考虑在前端尝试调用AJAX,但它没有路由URL,我不允许编辑这个项目。有没有办法在后端与部署在同一服务器上的单独项目进行通信?

更新

public async Task<IHttpActionResult> SendEmail(string message)
    {
        //Hosted web API REST Service base url  
        string Baseurl = "http://services.domain.dev/";
        SendMailModel mail = new SendMailModel();
        mail.SendTo = "test@email.com";
        mail.Body = message;
        using (var client = new HttpClient())
        {
            //Passing service base url  
            client.BaseAddress = new Uri(Baseurl);

            client.DefaultRequestHeaders.Clear();
            //Define request data format  
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var stringContent = new StringContent(JsonConvert.SerializeObject(mail), Encoding.UTF8, "application/json");
            HttpResponseMessage Res = await client.PostAsync("api/Email/Send", stringContent);

            //Checking the response is successful or not which is sent using HttpClient  
            if (Res.IsSuccessStatusCode)
                return Ok(true);
            return Ok(false);
        }
    }

我一直试图用它来与其他控制器通信,但我没有运气。有没有办法在不使用异步的情况下与另一个控制器通信?

1 个答案:

答案 0 :(得分:0)

原来我的功能是正确的。我连接的电子邮件API只允许将电子邮件发送到开发帐户,因此在我将其发送到我的开发电子邮件之前,我无法收到它。