Xamarin.Forms 上的 HttpClient PostAsync 失败(状态码:404)

Posted

技术标签:

【中文标题】Xamarin.Forms 上的 HttpClient PostAsync 失败(状态码:404)【英文标题】:HttpClient PostAsync failing on Xamarin.Forms (StatusCode: 404) 【发布时间】:2016-11-25 06:41:22 【问题描述】:
var url = "http://domain.herokuapp.com/api/createuser";
var item = new  username = "kasunrt1", email = "dgggdgdg@test.com", password = "3333", tele = "123456789" ;
var uri = new Uri(url);
var json = JsonConvert.SerializeObject(item);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var client = new HttpClient();
var result = await client.PostAsync(url, content); 

服务已启动并正在运行。当我手动执行如下 API 字符串时,它适用于浏览器和邮递员。

http://domain.herokuapp.com/api/createuser/nameTest/testmail@gmail.com/346gf4/123456789

即使下面的代码也有效。

var result = await client.PostAsync("http://domain.herokuapp.com/api/createuser/nameTest/testmail@gmail.com/346gf4/123456789", null);

结果是 404 StatusCode:404,ReasonPhrase:“未找到”,版本:1.1,内容:System.Net.Http.StreamContent,标题: 服务器:牛仔 连接:保持活动 X-Powered-By: Express X-Content-Type-Options: nosniff 日期:格林威治标准时间 2016 年 11 月 25 日星期五 06:27:06 通过:1.1 vegur 内容类型:文本/html;字符集=utf-8 内容长度:28

Heroku 只收到以下请求。 2016-11-25T06:31:27.827923+00:00 heroku[router]: at=info method=POST path="/api/createuser" host=domain.herokuapp.com request_id=1cb51340-05a5-4503- acb5-9e3b45cdf393 fwd="61.245.163.5" dyno=web.1 connect=1ms service=71ms status=404 bytes=226

我似乎找不到这里有什么问题。任何帮助将不胜感激。 谢谢!

【问题讨论】:

无法复制。我用你提供的代码得到了结果 【参考方案1】:

有两个选项可以将数据发送到 API/URL。通过 url 参数或 POST 参数。您使用 Postman 发送的 url 通过 url 参数 (whats the difference?) 发送参数。

另一方面,您可以使用HttpClientPostAsync 方法通过POST 参数发送参数。这些值以内容类型指定的格式在请求正文中发送。

HttpClient 然后尝试访问 url http://domain.herokuapp.com/api/createuser(没有末尾的参数),并且该 url 不存在,这就是您收到 404 错误的原因。

选项 1:更改通过 POST 发送值的 API 方法

选项 2:更改您的请求以在 url 变量中设置值

选项 1 是实现这一目标的首选且正确的方法。因为你向你的 api 发布了一些东西。您的值需要在请求正文中,而不是直接在 url 中。因此,更改您的 API,您的代码应该可以工作

【讨论】:

是的。选项 1 有效。非常感谢您的精彩解释和答案! @乔尔 选项 1 是什么意思?你能说得更具体一点吗?

以上是关于Xamarin.Forms 上的 HttpClient PostAsync 失败(状态码:404)的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上的 Xamarin.Forms.Maps 中使用 Xamarin.Essentials Geolocation 获取设备位置的奇怪问题

在 Xamarin.Forms 上的 XAML 中将 BindingContext 设置为 ViewModel

单击按钮上的 Xamarin.Forms 动画(Flash 背景)

Xamarin Forms Picker - iOS 上的“完成”文本

Xamarin.Forms 上的 HttpClient PostAsync 失败(状态码:404)

Xamarin.Forms 中 TabbedPage 上的 Android.Views.InflateException