微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 将json字符串作为参数传递给webmethod

我正在向webmethod EmailFormRequestHandler发一个ajax帖子,我可以在客户端(通过firebug)看到请求的状态是200但是它没有达到我的webmethod中的停止点(webmethod的第一行).一切都工作得很好,json param是一个对象,但是我正在反序列化json的方式我必须把它改成一个字符串.

JS:

function SubmitUser@R_417_4045@ion($group) {
    var data = ArrayPush($group);
    $.ajax({
        type: "POST",
        url: "http://www.example.com/components/handlers/FormRequestHandler.aspx/EmailFormRequestHandler",
        data: JSON.stringify(data), // returns {"to":"[email protected]","from":"[email protected]","message":"sdfasdf"}
        dataType: 'json',
        cache: false,
        success: function (msg) {
            if (msg) {
                $('emailForm-content').hide();
                $('emailForm-thankyou').show();
            }
        },
        error: function (msg) {
            form.data("validator").invalidate(msg);
        }
    });
}

ASPX:

[WebMethod]
public static bool EmailFormRequestHandler(string json)
{
    var serializer = new JavaScriptSerializer(); //stop point set here
    serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
    dynamic obj = serializer.Deserialize(json, typeof(object));

    try
    {
        MailMessage message = new MailMessage(
            new MailAddress(obj.to),
            new MailAddress(obj.from)
        );
        message.Subject = "email test";
        message.Body = "email test body" + obj.message;
        message.IsBodyHtml = true;
        new SmtpClient(ConfigurationManager.AppSettings["smtpServer"]).Send(message);
        return true;
    }
    catch (Exception e)
    {
        return false;
    }
}

解决方法:

你错过了jQuery JSON帖子中的内容类型:

contentType: "application/json; charset=utf-8",

看到这篇文章.当我遇到类似问题时,它对我帮助很大:

> Using jQuery to directly call ASP.NET AJAX page methods(不再提供)
>来自互联网档案:Using jQuery to directly call ASP.NET AJAX page methods

您无需将ScriptManager配置为EnablePageMethods.

此外,您不需要在WebMethod中反序列化JSON序列化对象.让ASP.NET为您做到这一点.将WebMethod的签名更改为此(注意我将“Email”附加到单词“to”和“from”,因为这些是C#关键字,并且命名与关键字相同的变量或参数是不好的做法.将需要相应地更改您的JavaScript,以便JSON.stringify()将正确序列化您的字符串:

// Expected JSON: {"toEmail":"...","fromEmail":"...","message":"..."}

[WebMethod]
public static bool EmailFormRequestHandler(string toEmail, string fromEmail, string message)
{
    // Todo: Kill this code...
    // var serializer = new JavaScriptSerializer(); //stop point set here
    // serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
    // dynamic obj = serializer.Deserialize(json, typeof(object));

    try
    {
        var mailMessage = new MailMessage(
            new MailAddress(toEmail),
            new MailAddress(fromEmail)
        );
        mailMessage.Subject = "email test";
        mailMessage.Body = String.Format("email test body {0}" + message);
        mailMessage.IsBodyHtml = true;
        new SmtpClient(ConfigurationManager.AppSettings["smtpServer"]).Send(mailMessage);
        return true;
    }
    catch (Exception e)
    {
        return false;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐