C# ';提供了无效的请求URI。请求URI必须是绝对URI,或者必须设置BaseAddress;

C# ';提供了无效的请求URI。请求URI必须是绝对URI,或者必须设置BaseAddress;,c#,C#,我试图使用以下代码从xamarin forms应用程序中使用RESTAPI。然而,由于一些奇怪的原因,我得到了无效的URI错误。我还尝试在PostAsync方法中使用绝对路径,但错误仍然存在。有人能给我介绍一下吗 HttpClient client = new HttpClient(); string baseAdd = @"http://localhost:9000/"; public async void GenerateAPIToken() {

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

HttpClient client = new HttpClient(); 
string baseAdd = @"http://localhost:9000/";

    public async void GenerateAPIToken()
    {

        string tsResult = "";
        try
        {

            Token token = new Token();
            //GET TOKEN
            client.BaseAddress = new Uri(baseAdd);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpRequestMessage msg = new HttpRequestMessage();
            msg.Content = new StringContent(@"{""username"":""admin"",""password"":""admin123""}");


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


            if (response.StatusCode == HttpStatusCode.OK)
            {
                HttpContent cnt = response.Content;
                tsResult = await cnt.ReadAsStringAsync();
                token = JsonConvert.DeserializeObject<Token>(tsResult);
                App.apiToken = token.Document.AccessToken;
            }

        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

    }
HttpClient=newhttpclient();
字符串baseAdd=@”http://localhost:9000/";
公共异步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;
}
}
捕获(例外情况除外)
{
抛出新异常(例如消息);
}
}

看起来您正在设置基地址,并发送一个绝对URI。 当设置基址时,它将作为前缀添加到URI中。 您必须设置基址并发送相对URI,或者发送绝对URI而不设置基址。 看见

字符串baseAdd具有以下值:请参见上面的代码,因为在注释中它正在下拉slahses和Http协议
client.BaseAddress+“token/generate.php”
--HttpClient已经添加了BaseAddress。这意味着它将被添加两次。您可能还希望您的基地址以
http://
https://
@canton7开头。我已尝试仅传递“token/generate.php”,并在PostAsync参数中提供绝对URL,但仍然存在相同的错误。基址包括协议http://出于某种原因,它刚刚从stackoverflow上删除。这是否回答了您的问题?谢谢你的帮助。如何根据您发送给我的文档修改上述代码?@cvdev或者不设置client.BaseAddress,或者不要在client.PostAsync中连接它。我曾尝试在PostAsyc方法中提供整个URL,但仍然出现同样的错误奇怪地尝试了很多次,但仍然会弹出同样的错误…我不明白为什么使用REST API已经很长时间了