gpt4 book ai didi

json - WCF WebInvoke 方法 POST

转载 作者:行者123 更新时间:2023-12-02 07:07:31 26 4
gpt4 key购买 nike

我有一个 wcf 服务,我想测试向其发布数据。但我的函数的参数从未获得任何值。

[OperationContract]
[WebInvoke(UriTemplate = "TestPost", Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
int Test(string value);

public int Test(string value) //Value stays null
{
return 0;
}

我发送的 JSON 请求,使用 Fiddler2 构建

http://localhost:49633/Service1.svc/TestPost

User-Agent: Fiddler
Host: localhost:49633
Content-Length: 42
Content-type: application/json

{"value":{"name":"value","name1":"value"}}

我希望参数包含 JSON 字符串,所以基本上我正在创建一个包含 JSON 对象的 JSON 请求,因为我想稍后将 JSON 对象反序列化为我的自定义对象之一。知道为什么 value 参数保持为空吗?

谢谢

最佳答案

我使用下面的方法将 json 字符串发布到上面定义的服务,它对我有用:

我的服务:

[WebInvoke(UriTemplate = "TestPost", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public int Test(string value)
{
Console.Write(value);
return 1;
}

我的客户:

private string UseHttpWebApproach(string serviceUrl, string resourceUrl, string method, string requestBody)
{
string responseMessage = null;
var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
if (request != null)
{
request.ContentType = "application/json";
request.Method = method;
}

//var objContent = HttpContentExtensions.CreateDataContract(requestBody);
if(method == "POST" && requestBody != null)
{
byte[] requestBodyBytes = ToByteArrayUsingJsonContractSer(requestBody);
request.ContentLength = requestBodyBytes.Length;
using (Stream postStream = request.GetRequestStream())
postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);

}

if (request != null)
{
var response = request.GetResponse() as HttpWebResponse;
if(response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
if (responseStream != null)
{
var reader = new StreamReader(responseStream);

responseMessage = reader.ReadToEnd();
}
}
else
{
responseMessage = response.StatusDescription;
}
}
return responseMessage;
}

private static byte[] ToByteArrayUsingJsonContractSer(string requestBody)
{
byte[] bytes = null;
var serializer1 = new DataContractJsonSerializer(typeof(string));
var ms1 = new MemoryStream();
serializer1.WriteObject(ms1, requestBody);
ms1.Position = 0;
var reader = new StreamReader(ms1);
bytes = ms1.ToArray();
return bytes;
}

我在客户端对 UseHttpWebApproach 的调用如下:

string serviceBaseUrl = <<your service base url>>;
string resourceUrl = "/TestPost";
string method = "POST";
string jsonText = "{\"value\":{\"name\":\"value\",\"name1\":\"value\"}}";
UseHttpWebApproach(serviceBaseUrl, resourceUrl, method, jsonText);

以下是我的 Fiddler 请求:

POST http://localhost/VDName/AppName/TestPost HTTP/1.1
Content-Type: application/json
Content-Length: 54
Connection: Keep-Alive

"{\"value\":{\"name\":\"value\",\"name1\":\"value\"}}"

关于json - WCF WebInvoke 方法 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9715743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com