与restsharp一起发布到休息服务

本文关键字:服务 restsharp 一起 | 更新日期: 2023-09-27 18:20:47

好吧,我假设这是一个简单的问题,但我在任何地方都找不到答案。。。我有一个客户需要通过.net查询rest api。他给我发了这个api的url和一个数据样本。这是他发送的:

<?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,我正在尝试向该服务发帖。但我一直在返回get页面,其中包含api的详细信息。这就是我用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调用,但我在这一点上迷失了方向。。。谢谢

与restsharp一起发布到休息服务

如果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