Выполнение асинхронного вызова WebService из ASP.Net MVC

Я хотел бы (как говорится в вопросе) сделать асинхронный вызов, предпочтительно с использованием ASP.net AJAX.

Код для WebMethod выглядит следующим образом:

[WebMethod]
public void SendMail(string name, string email, string subject, string body)
{
  MailMessage toSend = new MailMessage(email, address@domain.com, subject, body);
  var smtp = new SmtpClient();
  smtp.Send(toSend);
}

Неудивительно, что поля в представлении: имя, адрес электронной почты, тема, тело.

В моих попытках сделать это я не смог добраться до WebMethod. Сервисная ссылка на месте, так что, по крайней мере, я не облажался.

Спасибо за помощь...

3 ответа

Решение

Здесь вы можете найти пример вызова асинхронных методов с AJAX в ASP.NET MVC с такими элементами, как

<% using (Ajax.Form("SendMail", new AjaxOptions { UpdateTargetId = "resultDiv" })) { %>

   <!-- Your form elements here... -->

<% } %>

Вы можете получить параметры в методе контроллера и вызвать веб-сервис оттуда.

Это не ответ на ваш вопрос, а предупреждение. Я смотрел на этот метод и думал: "Хм, мне интересно, заботится ли ASP.NET, поступает ли вызов этого веб-метода с вашего сайта или где-то еще?" Быстрый поиск в Google заставляет меня поверить, что нет никаких проверок, чтобы убедиться, что какой-то душ не использует ваши веб-методы для своих собственных злонамеренных желаний ( об этом есть в блоге).

Поэтому, прежде чем начать работать, вы можете подумать о том, как запретить кому-либо угонять ваш веб-метод и отправлять мне электронные письма от Виагры. Потому что, если я получу электронное письмо от Виагры с вашего сайта, я не буду вам очень доволен.

По данным библиотеки MSDN

Чтобы доступ к веб-службе осуществлялся из сценария, он должен быть веб-службой.asmx, класс веб-службы которого квалифицирован атрибутом ScriptServiceAttribute. Отдельные методы, вызываемые из скрипта, должны быть квалифицированы атрибутом WebMethodAttribute.

см. http://msdn.microsoft.com/en-ca/library/bb398998.aspx

Другие вопросы по тегам