c# - API GET 请求返回 HTML/文本而不是 JSON

标签 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 格式的 header 。当我在 Microsoft 网站上的官方 .NET 文档中添加代码时,它给我的 Json Deserialiser 带来了问题。我还在 header 中添加了信息,以确保它返回 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 似乎正在返回一条错误消息,也许它可以处理我的 url???我已经使用文件系统方法发布了网站。因此,要访问 Postman 中的 API,我将使用 http://localhost:[port]/api/values , 在普通的 ol' 浏览器中调用我的网站就可以了 http://my_url/HelloEmu .我得到一个 403“无目录”方法作为返回...

编辑:这是 postman 代码: enter image description here

最佳答案

通常发生这种情况是因为缺少 header 或其他一些格式错误的请求,下载 RestSharp来自 NuGet 的 DLL,然后你可以使用以下内容,在 postman 中,转到“代码”:

enter image description here

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

enter image description here

关于c# - API GET 请求返回 HTML/文本而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56857142/

相关文章:

c# - 使用数组进行独特行程选择的最佳性能算法?

C# 错误 - 由于可选参数或其他原因?

jquery - 如何将 Rails 路线助手与 jQuery 结合使用?

javascript - Mongoose - find() 在没有传递参数时不返回任何内容,但在传递参数时返回数据

C: 如何从dll API调用函数?

c# - 在转发器中定义变量?

c#手机格式扩展方法

java - Java REST Web 服务中的线程

java - spring下载excel文件

api - 是否有适用于 Office 365 的配置 API?