【问题标题】:Unable to send post requests to REST through HTTPClient无法通过 HTTPClient 向 REST 发送 post 请求
【发布时间】: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 正确。不过谢谢你! :)

标签: c# rest http xamarin dotnet-httpclient


【解决方案1】:

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

public string Insert([FromBody]string s)

【讨论】:

    【解决方案2】:
    1. 去掉uri最后的“/”

      应该是:

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

    2. Todd Meiner 也是这么说的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2016-05-22
      • 2014-07-28
      相关资源
      最近更新 更多