gpt4 book ai didi

c# - HttpClient.PostAsync 总是返回 404

转载 作者:可可西里 更新时间:2023-11-01 17:35:09 27 4
gpt4 key购买 nike

我有一个试图将数据发布到 Web API 的 Xamarin.Forms 应用程序。 (Web API 2 和 MVC)。

我遇到的问题是我的 HttpResponse 总是返回 404 - 即使我知道应用程序可以连接到服务器。 (获取数据没问题,发布则不然。)

Xamarin 代码:(客户端 - 忽略方法的返回类型,我已经删除了很多业务逻辑!)

    //Method that passes the route and param to getChartData()
private BarChartModel getChartData ()
{
string postData = JsonConvert.SerializeObject (this);
string chartData = FRAPI.GetDataWithData ("BARCHART/GETBARCHART/", postData);
return JsonConvert.DeserializeObject<BarChartModel> (chartData);
}


//method that connects to the web api.
public static string GetDataWithData (string route, string data)
{
using (var client = new HttpClient ())
{
client.BaseAddress = new Uri (APIRoot);

var content = new StringContent (data, System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = client.PostAsync (route, content).Result;
if (response.IsSuccessStatusCode)
{
response.EnsureSuccessStatusCode ();
}
else {//blah}
}
}

API - 服务器端代码:

    [HttpPost]
[Route("api/BarChart/GetBarChart/{data}")]
public HttpResponseMessage GetBarChart(string data)
{
try
{
BarChart barChart = JsonConvert.DeserializeObject<BarChart>(data, GlobalSettings.JsonSettings);
return Request.CreateResponse(HttpStatusCode.OK, "true");
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
}
}

路由配置:

    config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);

值得一提的是,我尝试了多种服务器端代码变体,包括:

  • 从路由中删除 {data} 部分。 (下面贴出的教程有类似的路线,不包含路线。)
  • 在方法签名中包含 [FromBody] 标签。

据我所知,我的代码实际上与此 tutorial. 中的 resgisterUser 代码没有区别(对象名称除外)。

提前致谢!

最佳答案

您的代码与示例之间的唯一区别是您的代码接收到您尝试反序列化的 string。你应该让 ASP.Net 为你做反序列化。换句话说,像这样更改代码:

[HttpPost]
[Route("api/BarChart/GetBarChart")]
public HttpResponseMessage GetBarChart(BarChart barChart)
{
try
{
Debug.WriteLine(barChart);
// do something useful with the barChart...
return Request.CreateResponse(HttpStatusCode.OK, "true");
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
}
}

并且 ASP.Net 会将请求的正文反序列化为 BarChart(前提是您发送的 json 与 BarChart 类型匹配)。

顺便说一句:在您实际POST 时命名方法GetBarChart 有点误导。

关于c# - HttpClient.PostAsync 总是返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355248/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com