Esecuzione di una chiamata asincrona al servizio Web da ASP.Net MVC
-
19-08-2019 - |
Domanda
Vorrei (come afferma la domanda) fare una chiamata asincrona, preferibilmente usando ASP.net AJAX.
Il codice per WebMethod è simile al seguente:
[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);
}
I campi nella vista sono, non a caso: nome, email, oggetto, corpo.
Nei miei tentativi di farlo non sono stato in grado di accedere al WebMethod. Il riferimento al servizio è attivo, quindi almeno non l'ho rovinato.
Grazie per l'aiuto ...
Soluzione
Qui puoi trovare un esempio di invocazione di metodi asincroni con AJAX in ASP.NET MVC con elementi come
<% using (Ajax.Form("SendMail", new AjaxOptions { UpdateTargetId = "resultDiv" })) { %>
<!-- Your form elements here... -->
<% } %>
Puoi ricevere i parametri nel metodo controller e chiamare il servizio web da lì.
Altri suggerimenti
Questa non è una risposta alla tua domanda ma un avvertimento. Stavo guardando questo metodo e pensando, "hmm, mi chiedo se ASP.NET si preoccupa se una chiamata a questo metodo web proviene dal tuo sito o da qualche altra parte?" Una rapida ricerca su Google mi porta a credere che non ci sia alcun controllo per assicurarsi che qualche idiota non stia usando i tuoi metodi web per i suoi desideri maliziosi ( ecco un post sul blog che parla di questo ).
Quindi, prima di farlo funzionare, potresti voler pensare a modi per impedire a qualcuno di dirottare il tuo metodo web per inviarmi e-mail sul Viagra. Perché se ricevo un'e-mail sul Viagra dal tuo sito Web, non sarò molto contento di te.
Secondo la MSDN Library
Per essere un servizio Web accessibile dallo script, deve essere un Servizio Web .asmx il cui servizio Web la classe è qualificata con il Attributo ScriptServiceAttribute. Metodi individuali da chiamare lo script deve essere qualificato con Attributo WebMethodAttribute.
vedi http://msdn.microsoft.com/en-ca/ biblioteca / bb398998.aspx