Выполнение асинхронного вызова 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.