Realizar una llamada de servicio web asíncrono desde ASP.Net MVC
-
19-08-2019 - |
Pregunta
Me gustaría (como dice la pregunta) hacer una llamada asincrónica, preferiblemente usando ASP.net AJAX.
El código para WebMethod se ve así:
[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);
}
Los campos en la vista son, no sorprendentemente: nombre, correo electrónico, asunto, cuerpo.
En mis intentos de hacer esto, no he podido acceder al WebMethod. La referencia de servicio está en su lugar, así que al menos no lo arruiné.
Gracias por la ayuda ...
Solución
Aquí puede encontrar un ejemplo de invocación de métodos asincrónicos con AJAX en ASP.NET MVC con elementos como
<% using (Ajax.Form("SendMail", new AjaxOptions { UpdateTargetId = "resultDiv" })) { %>
<!-- Your form elements here... -->
<% } %>
Puede recibir los parámetros en el método del controlador y llamar al servicio web desde allí.
Otros consejos
Esta no es una respuesta a su pregunta, sino una advertencia. Estaba mirando este método y pensando, "hmm, me pregunto si a ASP.NET le importa si una llamada a este método web proviene de su sitio o de otro lugar". Una búsqueda rápida en Google me lleva a creer que no hay ninguna verificación para asegurarse de que algún imbécil no esté utilizando sus métodos web para sus propios deseos maliciosos ( aquí hay una publicación de blog que habla sobre esto ).
Por lo tanto, antes de que esto funcione, es posible que desee pensar en formas de evitar que alguien piratee su método web para enviarme correos electrónicos de Viagra. Porque si recibo un correo electrónico de Viagra de su sitio web, no voy a estar muy contento con usted.
Según la biblioteca de MSDN
Para que un servicio web sea accedido desde el script, debe ser un Servicio web .asmx cuyo servicio web clase está calificada con el ScriptServiceAttribute atributo. Métodos individuales para llamar el script debe estar calificado con el Atributo WebMethodAttribute.
ver http://msdn.microsoft.com/en-ca/ library / bb398998.aspx