无法通过 HTTPClient 向 REST 发送 post 请求

Posted

技术标签:

【中文标题】无法通过 HTTPClient 向 REST 发送 post 请求【英文标题】:Unable to send post requests to REST through HTTPClient 【发布时间】:2017-01-05 15:14:56 【问题描述】:

我正在努力解决的快速问题。

我已经启动并运行了一个 REST Api,它可以与 Postman 一起正常运行,我正试图弄清楚如何使用来自 Xamarin Forms 的 Post-request(使用 HTTPClient)进行调用。

这是我当前的代码:

    public CreateFoundation()
    
        InitializeComponent();
        lblInstructions.FontAttributes = FontAttributes.Bold;
        lblInstructions.FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label));

        btnCreate.Clicked += async (s, e) =>
            
                var arb = await PostCreateFoundation(txtCreateFoundation.Text); 
                await DisplayAlert("Clicked", "I was clicked. Text was: " + arb, "OK");
            ;
    


    public async Task<string> PostCreateFoundation(string arbitrary)
    

        Debug.WriteLine("I'm in!");
        var client = new System.Net.Http.HttpClient();
        client.DefaultRequestHeaders.Add("Accept", "application/json");
        var content = new StringContent(arbitrary); 

        var response = await client.PostAsync("http://myapi.com/RestfulAPI/api/Ole_foundations/Insert/", content);

        var result = (response.Content.ReadAsStringAsync().Result); 
        return result;


    

当显示返回的string (arb) 时,我可以看到 uri 是 http://myapi.com/RestfulAPI/api/Ole_foundations/Insert/.,无论我作为任意字符串发送什么...

发送字符串“test”时得到的url是:

MESSAGE": "未找到与请求 URI 'http://myapi.com/RestfulAPI/api/Ole_foundations/Insert/' 匹配的 HTTP 资源。"

编辑: API 将任意字符串作为令牌,将预定义的对象添加到数据库中,并将传入的任意字符串作为返回令牌返回。

REST API 函数头:

    [HttpPost]
    public string Insert(string s)

【问题讨论】:

感谢您的编辑,我不确定是否应该包含真实的 API 地址,因为“最小的、可验证的示例”可能需要它。 其余服务应该返回什么?你最后的话有点混乱。您希望请求后 url 发生变化吗? REST 服务只返回一个字符串,没有别的。我正在处理实时数据,所以我传入一个字符串并希望从服务中取回它。就像一个标记,以确保预定义的对象已插入数据库。 好吧,如果您的问题与该服务直接相关,则可能需要真正的 url。但相反,您正在努力实现发布请求。因此,放置真实的网址并不是最好的主意。 @TolgaEvcimen 正确。不过谢谢你! :) 【参考方案1】:

当一个动作参数是一个简单的类型,比如一个字符串,WebAPI 假定它应该在查询字符串中寻找它。但是你在体内传递它。尝试将 API 端的方法签名更改为:

public string Insert([FromBody]string s)

【讨论】:

【参考方案2】:

    去掉uri最后的“/”

    应该是:

    http://myapi.com/RestfulAPI/api/Ole_foundations/Insert

    Todd Meiner 也是这么说的

【讨论】:

以上是关于无法通过 HTTPClient 向 REST 发送 post 请求的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.net 4 Web API 2 项目通过 HttpClient 调用 REST 服务导致异常

从 HttpClient 向 webapi 提交 File 和 Json 数据

如何使用基于 HttpClient 和 .net4 的 Rest-client 进行身份验证

如何接收httpclient发送的请求

HttpClient 抛出“发送请求时发生错误。”

从本机 Java Rest 客户端发送 Http Post [重复]