使用restsharp发布到休息服务

时间:2012-01-18 21:09:07

标签: c# rest

好的,我假设这是一个简单的,但我无法在任何地方找到答案...我有一个客户端需要通过.net查询rest api。他给我发了api的网址和数据样本。这就是他发送的内容:

<?xml version="1.0"?>
<root>
<request>
<APIClientID>0</APIClientID >
<Version>0</Version>
<APIPassword>password</APIPassword >
<Function>functionName</Function >
<Params>
<UserId>(current-datetime)</UserId >
<page>example.aspx</page>
<application>appName</application>
<function>functionName</function>
</Params>
</request >
</root >

我正在使用restsharp,我正在尝试为该服务发帖子。但我一直在回到带有api详细信息的get页面。这就是我正在做的restsharp ......

var client = new RestClient();
client.BaseUrl = url;

var request = new RestRequest(Method.POST);

request.AddHeader("APIClientID", "4");
request.AddHeader("Version", "0");
request.AddHeader("APIPassword", "password");
request.AddHeader("Function", "TransAPIStats");
request.AddHeader("Version", "0");
request.AddParameter("Client", "test client");
request.AddParameter("UserId", DateTime.Now.ToString());
request.AddParameter("Page", "example.aspx");
request.AddParameter("Application", "app");
request.AddParameter("Function", "function");

RestResponse response = client.Execute(request);

任何关于我出错的地方的想法都会非常谨慎!我猜测有一些关于hte xml的东西我没有正确地转换到restsharp调用,但是我在这一点上迷失了...谢谢!

1 个答案:

答案 0 :(得分:3)

如果POST主体需要是XML文档,请使用AddBody()。它默认为将传递给它的对象序列化为XML。您可以使用与您尝试生成的架构匹配的匿名对象执行此操作:

var client = new RestClient();
client.BaseUrl = url;

var request = new RestRequest(Method.POST);
request.AddBody(new {
    root = new {
        request = new {
            APIClientID = 4,
            Version = 0,
            APIPassword = "password",
            Function = "TransAPIStats",
            Params = new {
                UserId = "abc",
                page = "example.aspx",
                Application = "hrblock-cb",
                Function = "ecb"
            }
        }
    }
});

或者您可以定义一个与模式匹配的简单C#对象,并使用它来代替内联匿名对象。

如果您需要控制序列化(默认值应根据您显示的示例数据工作),您可以实现自己的ISerializer。这方面的文档是此处的最后一部分:https://github.com/restsharp/RestSharp/wiki/Deserialization