c# - 使用restsharp发布到休息服务

标签 c# rest

好吧,我假设这是一个简单的问题,但我在任何地方都找不到答案...我有一个客户端需要通过.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,并且正在尝试向该服务发布帖子。但我一直只是返回包含 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 调用,但此时我迷失了......谢谢!

最佳答案

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

关于c# - 使用restsharp发布到休息服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8917437/

相关文章:

c# - 命名管道创建时所有实例都忙异常

java - 如何使用 Grizzly 在相同的基本 url 上提供静态内容和资源

java - 使用通用 'header' 增强 Spring Rest API

c# - 填充未应用于字符串

Delphi datasnap RESTful URL如果包含带有字符T/F/Y/N的参数将转换为 bool 值True和False

rest - 如何从元数据中查找 OData 版本

REST 客户端扩展未在 VSCode 中发送表单数据

c# - 我应该学习哪些概念来实现这一点?

c# - 验证是否存在可用网络连接的最简单方法是什么?

c# - 如何向属性添加属性并使用它对成员进行排序