无法通过 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 数据