C# 使用httpclient使用REST API时出现无效URI错误

C# 使用httpclient使用REST API时出现无效URI错误,c#,api,xamarin.forms,C#,Api,Xamarin.forms,我试图使用以下代码从xamarin forms应用程序中使用RESTAPI。然而,由于一些奇怪的原因,我得到了无效的URI错误。我还尝试在PostAsync方法中使用绝对路径,但错误仍然存在。有人能给我介绍一下吗 HttpClient=新的HttpClient(); 字符串baseAdd=@”http://localhost:9000"; public异步void GenerateAPIToken() { 字符串tsResult=“”; 尝试 { 令牌=新令牌(); //领取代币 client.

我试图使用以下代码从xamarin forms应用程序中使用RESTAPI。然而,由于一些奇怪的原因,我得到了无效的URI错误。我还尝试在PostAsync方法中使用绝对路径,但错误仍然存在。有人能给我介绍一下吗

HttpClient=新的HttpClient(); 字符串baseAdd=@”http://localhost:9000";

public异步void GenerateAPIToken()
{
字符串tsResult=“”;
尝试
{
令牌=新令牌();
//领取代币
client.BaseAddress=新Uri(baseAdd);
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpRequestMessage msg=新的HttpRequestMessage();
msg.Content=newstringcontent(@“{”用户名“:”管理员“,”密码“:”管理员123“}”);
HttpResponseMessage response=wait client.PostAsync(client.BaseAddress+“token/generate.php”,msg.Content);
if(response.StatusCode==HttpStatusCode.OK)
{
HttpContent cnt=响应。内容;
tsResult=wait cnt.ReadAsStringAsync();
token=JsonConvert.DeserializeObject(tsResult);
App.apiToken=token.Document.AccessToken;
}
}
捕获(例外情况除外)
{
抛出新异常(例如消息);
}
}

谢谢

您已经指定了基地址

client.BaseAddress = new Uri(baseAdd);
所以你不需要在这里再做一次

HttpResponseMessage response = await client.PostAsync(client.BaseAddress+"token/generate.php", msg.Content);
相反,只要这样做

HttpResponseMessage response = await client.PostAsync("/token/generate.php", msg.Content);

您可以使用postman测试您是否通过postman works发送正确的requestYes请求。这是最奇怪的部分这是您的URI:
“http://localhost:9000“
,然后执行以下操作:
client.BaseAddress+“token/generate.php”
——您认为会发生什么?使用
UriBuilder()
。。您将避免这些问题。在构建任何类型的路径时,字符串连接都是一个可怕的想法。请尝试以下var response=client.PostAsync(baseAdd+“/token/generate.php”,content);var responseString=response.Content.ReadAsStringAsync();在您发布的代码中显示
stringbaseadd=@”http://localhost:9000";没有尾随“/”这应该是可接受的答案。不要投反对票。我发布的内容中有一个打字错误,事实上我是这样做的,17我不打算投反对票……我只是在寻找一个具体的解决方案。没时间玩了games@cvdev你可能没有,但有人做到了。根据您当前的问题,这是正确的答案。这应该被接受。如果这不能解决你的问题,那就提出一个新问题。
HttpResponseMessage response = await client.PostAsync("/token/generate.php", msg.Content);