WebMethod Ajax呼叫404找不到



我正在尝试创建一个WebForm,该WebForm将在提交时发送电子邮件。我创建了一个WebMethod,并正在尝试使用Ajax发布。当我提交时,我的Ajax是404ing。这是我的代码。关于.NET,我是一个初学者,并且正在尝试玩耍。

$(document).ready(function() {
$('.validate-form').submit(function (e) {
    e.preventDefault();
    var first_name = document.getElementById("first_name").value;
    var last_name = document.getElementById("last_name").value;
    var email = document.getElementById("email").value;
    var data = "{'first name': '" + first_name + "', 'last name': '" + last_name + "', 'fromEmail': '" + 
               email + "'}";
    console.log("data", data)
    $.ajax({
        type: "POST",
        url: "SendMessage.aspx/SendMessages",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).fail(function (xhr, ajaxOptions, thrownError) {
        console.log(xhr.status);
        console.log(thrownError);
    })
});
public partial class Send : System.Web.UI.Page
{
    [WebMethod]
    public static void SendMessages(string first_name, string last_name, string email, string comments)
    {
        const string SERVER = "zebra.aa.org";
        const string TOEMAIL = "adhsaj@am.org";
        MailAddress from = new MailAddress(email);
        MailAddress to = new MailAddress(TOEMAIL);
        MailMessage message = new MailMessage(from, to);
        message.Subject = "Web Site Contact Inquiry from " + first_name + last_name;
        message.Body = "Message from: " + first_name + last_name + " at " +
                       email + "nn" + comments;
        message.IsBodyHtml = false;
        SmtpClient client = new SmtpClient(SERVER);
        client.Send(message);
        Console.WriteLine(message);
    }
}

看起来问题是URL。客户端无法找到Web方法,因为URL不存在。尝试更改

url: "SendMessage.aspx/SendMessages"

to

url: "Send/SendMessages"

尝试将您的URL更新为Send.aspx/SendMessages

也最好使用

JSON.stringify({ first_name : first_name, last_name : last_name, email : email, comments : comments })

您没有以该方法需要的格式传递所需的数据。例如,我看到第一个参数是ASPX方法上的第一个参数,但是您的JSON在字符中具有空间。请还要更正并检查。

如果您检查了URL,并且看起来还不错,那么路由配置可能与您的Ajax调用混乱。您必须将其添加到RouteConfig.cs

routes.Ignore("{page}.aspx/{*webmethod}");

最新更新