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。
有简单的解决方案吗?
我提出的解决方案是一个相当复杂的解决方案,应该很简单。基本上,我制作了一个接受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);