【问题标题】:Making an Asynchronous WebService Call From ASP.Net MVC从 ASP.Net MVC 进行异步 WebService 调用
【发布时间】:2008-12-03 19:54:25
【问题描述】:

我希望(如问题所述)进行异步调用,最好使用 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。服务参考已经到位,所以至少我没有搞砸。

感谢您的帮助...

【问题讨论】:

    标签: asp.net-mvc web-services asp.net-ajax webmethod


    【解决方案1】:

    这不是对您问题的回答,而是警告。我看着这个方法并想,“嗯,我想知道 ASP.NET 是否关心对这个 Web 方法的调用是来自您的站点还是来自其他地方?”快速的谷歌搜索让我相信没有任何检查来确保某些冲洗者没有使用你的网络方法来实现他自己的恶意欲望 (here's a blog post talking about this)。

    因此,在开始这项工作之前,您可能需要考虑如何防止有人劫持您的网络方法向我发送伟哥电子邮件。因为如果我从您的网站收到伟哥电子邮件,我不会对您很满意。

    【讨论】:

    • 嗯,我没有考虑过,谢谢提醒。你有什么建议吗?
    • 我仔细查看了您提供的链接。该调用不在页面背后的代码中,而是在用于单独 Web 服务的 .asmx 文件中。我会做更多的阅读,看看是否适用相同的警告。
    【解决方案2】:

    Here 你可以找到一个在 ASP.NET MVC 中使用 AJAX 调用异步方法的示例,其中包含类似的元素

    <% using (Ajax.Form("SendMail", new AjaxOptions { UpdateTargetId = "resultDiv" })) { %>
    
       <!-- Your form elements here... -->
    
    <% } %>
    

    您可以在控制器方法中接收参数并从那里调用网络服务。

    【讨论】:

      【解决方案3】:

      根据 MSDN 库

      为了使 Web 服务 从脚本访问,它必须是 .asmx Web 服务,其 Web 服务 类是合格的 ScriptServiceAttribute 属性。 要调用的各个方法 脚本必须用 WebMethodAttribute 属性。

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

      【讨论】:

      • 好吧,WebMethod 属性就在那里,而 scriptservice 属性是该类的一部分。所以我不确定你想通过这个答案得到什么。
      猜你喜欢
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 2014-06-01
      • 1970-01-01
      • 2016-12-02
      • 2018-01-23
      相关资源
      最近更新 更多