我想在我的Web服务方法中将JSON数据返回给客户端。一种方法是创建SoapExtension
并将其用作我的Web方法等属性。另一种方法是简单地将[ScriptService]
属性添加到Web服务,并让.NET框架将结果返回为{{ 1}} JSON,回到用户({"d": "something"}
这里是我无法控制的东西)。但是,我想返回类似的内容:
d
最简单的方法可能是编写一个网络方法,如:
{"message": "action was successful!"}
这样,我在客户端得到的是:
[WebMethod]
public static void StopSite(int siteId)
{
HttpResponse response = HttpContext.Current.Response;
try
{
// Doing something here
response.Write("{{\"message\": \"action was successful!\"}}");
}
catch (Exception ex)
{
response.StatusCode = 500;
response.Write("{{\"message\": \"action failed!\"}}");
}
}
这意味着ASP.NET将其成功结果附加到我的JSON结果中。另一方面,如果我在写完成功消息后刷新响应(如{ "message": "action was successful!"} { "d": null}
),则会发生以下异常:
在发送HTTP标头后,服务器无法清除标头。
那么,如何在不改变方法的情况下获取我的JSON结果呢?
答案 0 :(得分:12)
这对我有用:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void ReturnExactValueFromWebMethod(string AuthCode)
{
string r = "return my exact response without ASP.NET added junk";
HttpContext.Current.Response.BufferOutput = true;
HttpContext.Current.Response.Write(r);
HttpContext.Current.Response.Flush();
}
答案 1 :(得分:2)
为什么不退回对象,然后在您的客户端中,您可以调用response.d
?
我不知道你是如何调用你的Web服务的,但我做了一些假设的例子:
我使用jquery ajax
制作了这个例子function Test(a) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "TestRW.asmx/HelloWorld",
data: "{'id':" + a + "}",
dataType: "json",
success: function (response) {
alert(JSON.stringify(response.d));
}
});
}
你的代码可能是这样的(你需要先允许从脚本调用web服务:'[System.Web.Script.Services.ScriptService]'):
[WebMethod]
public object HelloWorld(int id)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("message","success");
return dic;
}
在这个例子中,我使用了字典,但你可以使用带有字段“message”的任何对象。
如果我不理解你的意思,我很抱歉,但我真的不明白你为什么要做'response.write'的事情。
希望我至少帮助过。 :)