代码之家  ›  专栏  ›  技术社区  ›  Oren A

Web服务拒绝接收参数并用JSON回复

  •  5
  • Oren A  · 技术社区  · 14 年前

    (req是HttpWebRequest)

    req.Method = "GET";
    

    一切正常,但我得到了XML响应。
    当我指定内容类型时:

    req.ContentType = "application/json; charset=utf-8";  
    

    我明白了

    当我更改请求方法时:

    req.Method = "POST";  
    

    具有

        [WebMethod(EnableSession =true)]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string SimplestWebService()
        {         
            return "hello";
        }  
    

    以及参数:

        [WebMethod(EnableSession = true)]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string Echo(string aString)
        {       
            return aString;
        }
    

    补充:

    添加的模式: 网站确实标记为脚本:

    [ScriptService]
    public class MyAPI : System.Web.Services.WebService  
    

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(methodUrl.ToString());
    req.Method = "POST";
    req.Headers.Add("aString","oren");
    req.ContentLength = 0;    
    ...
    req.ContentType = "application/json; charset=utf-8";
    req.Accept = "application/json; charset=utf-8";
    using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
    {
      StreamReader sr = new StreamReader(res.GetResponseStream());
      result.Append(sr.ReadToEnd());
    }  
    ...
    

    也尝试过:

    req.Method = "POST";          
    string postData = "aString=kjkjk";
    req.ContentType = @"application/json; charset=utf-8";
    req.Accept = @"application/json; charset=utf-8";   
    ASCIIEncoding encoding = new ASCIIEncoding();
    byte[] byte1 = encoding.GetBytes(postData);
    req.ContentLength = byte1.Length;
    Stream newStream = req.GetRequestStream();
    newStream.Write(byte1, 0, byte1.Length);
    newStream.Close();           
    

    最后两个音符:

    2。请求json,代码 在web服务上从不到达断点 . 所以这可能是一个I is(我使用的是I is 6.1)问题。我试过MIME类型推荐 here .

    2 回复  |  直到 7 年前
        1
  •  5
  •   mikemanne    14 年前

    更新2:

    Accept: application/json, text/javascript, */*
    

    也有一些其他的不同,但这是唯一一个跳出来作为一个可能的吸烟枪。

    更新的答案(针对更新的问题):

    看起来您正确地使用了contentStream。但是,您推送到它上面的数据(“aString=kjkjk”)不是有效的JSON。如下所述,您的数据可能需要采用有效的JSON格式:

    {'aString':'kjkjk'}
    

    原始答案:

    我相信你设置的“aString”内容不正确。对于POST方法请求,“payload”数据不应用于头,而是请求本身的内容。因此,您需要将它流到请求对象上;请参见 this MSDN reference 举个例子。别忘了设置请求的内容长度。

    由于您是通过JSON实现服务的(并将JSON指定为内容类型),我相信您需要将JSON字符串转换为原始字节,这就是您将其推送到流中的原因。您的JSON字符串应该如下所示:

    {'aString':'This is the text I want to echo.'}
    

    您可能需要做一些微调(我不在一个可以轻松地组合出精确代码示例的地方),但这应该会让您朝着正确的方向前进。

        2
  •  0
  •   Wrikken    14 年前

    ContentType 在我看来是 请求 ,而不是响应。如果你发送一个 Accept