API GET请求返回HTML / Text而不是JSON

时间:2019-07-02 17:02:04

标签: c# rest api xamarin.forms

这是我第一次使用RESTful API和Xamarin等。到目前为止,我已经制作了一个简单的REST API。我已经写了一个GET调用,如果我写http://localhost:[num]/api/Name,它将返回匹配的Emu信息的JSON文件。我已经用Postman测试过,所以我知道它可以工作。

我现在编写了一个应用程序,该应用程序将调用此API,以便捕获此信息然后显示它。到目前为止,我已经将其连接到托管我的API的服务器,但是我无法使它返回JSON。相反,它似乎正在返回文本/ HTTP。

从我在以前的Stack Overflow线程中搜索的内容来看,似乎我缺少标头,要求该回复采用JSON格式。当我添加了Microsoft网站上官方.NET文档中的代码时,它给了我Json Deserialiser问题。我还在标题中添加了信息,以确保它返回json。

以下是该函数的代码:

async private void Submit_OnClicked(object sender, EventArgs e)
        {
            var nameValue = EmuName.Text;

            var baseAddr = new Uri("http://my_url/HelloEmu/");
            var client = new HttpClient { BaseAddress = baseAddr };
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            string url = (string)nameValue;
            var returnedJson = await client.GetStringAsync(url);

            Models.EmuItemModel MyEmu = JsonConvert.DeserializeObject<Models.EmuItemModel>(returnedJson);


            ReturnedName.Text = MyEmu.Name;
            ReturnedAge.Text = MyEmu.Age.ToString();
            ReturnedWeight.Text = MyEmu.Weight.ToString();

我的代码实际上在ReturnedWeight.Text = MyEmu.Weight.ToString()行上出错 但是我猜想在对象的反序列化过程中会出现更多不可思议的问题,因为当我在调试器中运行它时,它似乎“跳过”了前面的两行。

当我在Visual Studio 2019中运行它时,“ returnedJson”的值是这样的:

"<html><head><meta http-equiv=\"refresh\" content=\"0;url=http://lookup.t-mobile.com/search/?q=http://my_url/HelloEmu/Keith&t=0\"/></head><body><script>window.location=\"http://lookup.t-mobile.com/search/?q=\"+escape(window.location)+\"&r=\"+escape(document.referrer)+\"&t=0\";</script></body></html>" 

认为这是HTML输出。我想知道我在做什么错的任何提示!

编辑:由于HTML似乎似乎正在返回错误消息,因此它可能与我的网址有关???我已经使用文件系统方法发布了该网站。因此,要在Postman中访问API,我将使用http://localhost:[port]/api/values,在常规的在线浏览器中调用我的网站使其进入http://my_url/HelloEmu。我得到了403“无目录”方法作为回报...

编辑:这是邮递区号: enter image description here

1 个答案:

答案 0 :(得分:0)

通常会发生这种情况,因为缺少标头或其他格式错误的请求,即来自NuGet的Downlan RestSharp DLL,然后您可以在邮递员中使用以下代码,转到“代码”:

enter image description here

然后选择C#,您将看到一个代码片段(示例):

enter image description here