无法通过HTTPClient

时间:2017-01-05 15:14:56

标签: c# rest http xamarin dotnet-httpclient

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

我有一个REST Api启动并运行,可以正常使用 Postman ,我正试图弄清楚如何使用Xamarin Forms(使用HTTPClient)的Post-request调用。< / p>

这是我目前的代码:

    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;


    }

当显示返回的stringarb)时,我可以看到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)

2 个答案:

答案 0 :(得分:0)

当action参数是类似字符串的简单类型时,WebAPI会假定它应该在查询字符串中查找它。但是你将它传递到体内。尝试将API端的方法签名更改为:

public string Insert([FromBody]string s)

答案 1 :(得分:0)

  1. 删除最后的&#34; /&#34;在uri上

    应该是:

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

  2. Todd Meiner所说的