gpt4 book ai didi

c# - WCF Restful 服务的 Http Post 格式

转载 作者:太空狗 更新时间:2023-10-29 22:08:39 25 4
gpt4 key购买 nike

嘿, super 新手问题。考虑以下 WCF 函数:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

[WebInvoke(UriTemplate = "",
Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare) ]
public SomeObject DoPost(string someText)
{
...
return someObject;

在 fiddler 中,我的请求 header 和正文会是什么样子?

感谢您的帮助。

最佳答案

我稍微更改了您的 WCF 服务以获得更好的示例并编写了示例测试程序(见下文)。

第一个测试对 URL http://localhost:57211/Service1.svc/getcar/1 执行 GET 请求。末尾的 1 是一个参数。在您的情况下,端口号可能会有所不同。结果是:

{"ID":1,"Make":"Porsche"}

第二个测试通过将相同的数据(保时捷的法拉利除外)发送到 URL http://localhost:57211/Service1.svc/updatecar/1 来执行 POST 请求。结果是:

{"ID":1,"Make":"Ferrari"}

此请求在 URL 中有一个参数(1)加上请求数据(JSON 结构)作为第二个参数,作为请求正文传输。

使用网络调试器,它看起来像这样(简化):

POST /Service1.svc/updatecar/1 HTTP/1.1
Host: localhost:57211
Content-Type: application/json
Content-Length: 25

{"ID":1,"Make":"Ferrari"}

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Sat, 25 Dec 2010 19:16:19 GMT
Content-Length: 25
Content-Type: application/json; charset=utf-8

{"ID":1,"Make":"Ferrari"}

希望对您有所帮助。

测试服务.cs:

class TestService
{
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:57211/Service1.svc/getcar/1");
WebResponse response = request.GetResponse();
string result = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(result);

string requestData = "{\"ID\":1,\"Make\":\"Ferrari\"}";
byte[] data = Encoding.UTF8.GetBytes(requestData);
request = (HttpWebRequest)WebRequest.Create("http://localhost:57211/Service1.svc/updatecar/1");
request.Method = "POST";
request.ContentType = "application/json";
Stream dataStream = request.GetRequestStream();
dataStream.Write(data, 0, data.Length);
dataStream.Close();

response = request.GetResponse();
result = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(result);
}
}

IService.cs:

[ServiceContract]
public interface IService1
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/getcar/{id}")]
Car GetCar(string id);

[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/updatecar/{id}")]
Car UpdateCar(string id, Car car);
}


[DataContract]
public class Car
{
[DataMember]
public int ID { get; set; }

[DataMember]
public string Make { get; set; }
}

服务.svc:

public class Service1 : IService1
{
public Car GetCar(string id)
{
return new Car { ID = int.Parse(id), Make = "Porsche" };
}


public Car UpdateCar(string f, Car car)
{
return car;
}
}

Service1.svc(标记):

<%@ ServiceHost Language="C#" Debug="true" Service="JSONService.Service1" CodeBehind="Service1.svc.cs" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

关于c# - WCF Restful 服务的 Http Post 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530169/

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