c# - 如何使用 curl 将参数 POST 到 WCF 服务

标签 c# wcf http curl

如何使用命令行工具 curl 发布到具有超过 1 个参数的 WCF 服务?

我有如下服务

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
    void PostMethod(string varString, bool varBool);
}

我这样设置服务器

var service = new WebServiceHost(typeof(MyService),
    new Uri("http://localhost:3000/MyService");
service.AddServiceEndpoint(typeof(IMyService), new WebHttpBinding(), "");
service.Open();

如何通过 curl 调用此方法?

curl -d varString=foo -d varBool=true http://localhost:3000/MyService/PostMethod

错误在哪里?该方法的 BodyStyle 是否错误?我应该像下面这样将参数包装在 [DataContract] 类中吗?

[DataContract]
public class PostMethodResult
{
    [DataMember]
    public string varString { get; set; }

    [DataMember]
    public bool varBool { get; set; }
}

最佳答案

修改后的答案:

URI 模板不适用于使用 curl 将请求发布到 Web 服务。 WebInvoke 期望 POST 正文是 XML 或 JSON。

WebMessageBodyStyle.Bare 不起作用,因为您有 2 个参数,所以您必须换行。

[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped)]
string PostMethod(string varString, bool varBool); 

帖子的主体形状是这样的:

 <PostMethod  xmlns="http://tempuri.org/"><varString>1</varString><varBool>true</varBool> </PostMethod>

使用 UriTemplate 可以通过 URI 传递值,因此它是一个 POST 但主体为空。

您可以使用的与 curl 最接近的选项是 JSON

[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json)]
string PostMethodJson(string varString, bool varBool);

它不是很漂亮,但你可以使用它:

curl -d"{\"varString\":\"so99\",\"varBool\":\"true\"}"  -i -X POST -H "Content-Type:application/json"  http://localhost:3000/MyService/PostMethodJson

关于c# - 如何使用 curl 将参数 POST 到 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198616/

相关文章:

c# - 为什么我不能通过 dynamic 关键字访问从函数返回的匿名类型的属性?

c# - 从现有数组的一部分创建新数组的好方法是什么?

WCF 与 Entity Framework 错误第二部分

c# - 使用 SSL 的 .net Web 服务。 wcf?

Http POST 请求发送用户名和密码的动态值。杰米特

c# - 将输入值保存在二维数组中

.net - 无法添加对 dll 的引用

http - ResponseWriter.Write 返回的 int 是什么意思?

javascript - 使用 jquery ajax 的两个 CORS 请求之间的时间间隔

c# - Console.Writeline 基础知识