通过ASP.NET JSON返回阿拉伯文本

3
我希望通过ASP.NET Web方法以JSON返回阿拉伯文本,这是我正在使用的代码:

```

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void getAr()
{
    ResultTemplate resultTemplate = new ResultTemplate();
    resultTemplate.data = "بسم الله";

    JavaScriptSerializer js = new JavaScriptSerializer();
    string retJSON = js.Serialize(resultTemplate);

    Context.Response.Clear();
    Context.Response.ContentType = "application/json";
    Context.Response.AddHeader("content-length", retJSON.Length.ToString());
    Context.Response.Flush();
    Context.Response.Write(retJSON);
}

当我运行Web方法时,它一直在加载而没有任何响应!

尝试将您的状态更改为静态,并返回变量retJSON,而不是使用Context。 - Quannt
请展示您如何调用此 Web 方法。 - naveen
@Quannt 状态怎么样!如果我返回变量 retJSON,它会作为 XML 而不是我需要的 JSON 返回。 - Khairy Abd El-Zaher
@naveen 我刚刚从浏览器中调用它: http://localhost:1959/req/ArabicTest.asmx/getAr - Khairy Abd El-Zaher
我看你的代码没有问题。它在我的浏览器上可以运行。你能否将前两行改为 string resultTemplate = "بسم الله"; 并告诉我你的浏览器是否有任何显示? - naveen
仍在加载中,没有收到响应,我正在使用Firefox。 - Khairy Abd El-Zaher
1个回答

1

您不应该像这样使用 WebMethod。将其签名更改为:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getAr()
{
  string result;
  // fill it ...
  return result;
}

加号

Response.Flush 意味着立即发送缓冲输出,所以应该将其放在最后。

Context.Response.Write(retJSON);
Context.Response.Flush();

此外,content-length并不等于字符串的长度。您应该将其转换为字节数组,然后使用其长度。
byte[] s = Encoding.UTF8.GetBytes(resultString);
response.AddHeader("Content-Length", s.Length.ToString());
response.BinaryWrite(s);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接