C#WebService发送标准的post请求体,用JSON进行响应

本文关键字:JSON 响应 请求 标准 post C#WebService | 更新日期: 2023-09-27 18:29:18

我在为.NET WebServices制作动态AJAX表单子方法时遇到了困难。

这个想法是发送一个由表单中的所有输入动态构建的请求。然后让服务器用JSON响应。

这是在表单提交时调用的,它用索引作为输入字段名,用值作为值填充数组:

var params = [];
for( var i in inputs )
{
    if( inputs[i].type == 'text' || inputs[i].type == 'password' )
    {
        params[inputs[i].name] = inputs[i].value;
    }
}

当AJAX请求被发送时,我运行一个循环来产生请求体:

var l = 0;
for( var i in parameters )
{
    this.parameters += ( l > 0 ? '&' : '') + i + '=' + parameters[i];
    l++;
}

结果如下:

foo=bar&lol=haha

问题是,由于decorator:,脚本服务只接受JSON作为请求主体

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

因为我希望它返回一个JSON字符串,而不是XML。

有简单的解决方案吗?

C#WebService发送标准的post请求体,用JSON进行响应

我提出的解决方案是一个相当复杂的解决方案,应该很简单。基本上,我制作了一个接受Xml格式的函数。然后将数据添加到更新模型中,该更新模型通过客户端轮询的更新方法格式化为JSON。

这里有一个例子:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class JsonHTTPService : System.Web.Services.WebService
{
    static JavaScriptSerializer JSON = new JavaScriptSerializer();
    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public dynamic update()
    {
        if (Session["user"] == null)
        {
            Session.Add("user", new User());
        }
        User user = (User)Session["user"];
        user.responseModel = new ResponseModel();
        if (user.updateListeners.Count > 0)
        {
            foreach (var updateMethod in user.updateListeners)
            {
                updateMethod.run();
            }
            return JSON.Serialize(user.responseModel);
        }
        return null;
    }
    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
    public void login(string email, string password)
    {
        if (Session["user"] == null)
        {
            return;
        }
        User user = (User)Session["user"];
        if (user.logged)
        {
            return;
        }
        if (user.Authenticate(email,password))
        {
            user.logged = true;
            user.updateListeners.Add(new LoginScreenRemover());
        }
    }
}

试试这个

[ScriptMethod(ResponseFormat=ResponseFormat.Json)]

我在我的应用程序中尝试了同样的方法,结果成功了。希望它也能解决你的问题。

尝试此JSON.stringify(params);