gpt4 book ai didi

c# - 为什么我的 API 返回 {}

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:15 25 4
gpt4 key购买 nike

我已经创建了一个 .NET API,但是当我尝试使用它时,我得到了奇怪的结果。

如果我在 Chrome 中转到 API 调用的 URL,我会得到我期望的 XML 格式的结果,但如果我在 IE 中尝试它,它会下载一个文件,当我打开它时,它只会显示 {} 或有时[{},{},{},{}] 如果我尝试返回数组的调用。

我也尝试过使用网络客户端。

WebClient web = new WebClient();
var data = web.DownloadString("http://myAPI.example.com/api/MyAPI/APIMethod?parameter1=hiImAParameter");

这也会返回空的 {}。

我试过在线搜索,但我没有在任何地方看到任何提及此问题的信息。我确定我一定在某处遗漏了一些东西,但我已经尝试查看我是如何设置我的 API 的,这一切对我来说都很好。

编辑:

这是我在 Chrome 中得到的响应。

<ArrayOfRoute xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TimePointModel">
<Route>
<RouteId>11235</RouteId>
<RouteName>Fibonacci</RouteName>
<Status i:nil="true"/>
<Width>0</Width>
</Route>
</ArrayOfRoute>

由于 Chrome 的接受 header ,它在 Chrome 上返回 XML。它应该在 IE 上返回 JSON,但由于某种原因,JSON 为空。

这是在我的 api Controller 中:

[AcceptVerbs("GET")]
public IEnumerable<Route> APIMethod(double parameter)
{
return new Manager(parameter).GetRoutes();
}

这是在我的 Global.asax.cs 中:

void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapHttpRoute(
name: "APIMethod",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "APIMethod", id = System.Web.Http.RouteParameter.Optional }
);
}

编辑:

当我执行不需要参数的 API 调用时,这非常有用。

WebClient web = new WebClient();
var data = web.DownloadString("http://myAPI.example.com/api/MyAPI/SimpleAPIMethod");

我一直在做研究,我试过像这样添加参数:

NameValueCollection myQueryStringCollection = new NameValueCollection();
string myParameter = "hiImAParameter";
myQueryStringCollection.Add("parameter1", myParameter);
web.QueryString = myQueryStringCollection;
var data = web.DownloadString("http://myAPI.example.com/api/MyAPI/APIMethod");

我注意到,如果我将带有查询字符串的完整 url 放入 chrome,我的数组中空 {} 的数量与数组中的项目数量相匹配。它只是为我的网络客户端清空它们。

我也试过添加

web.Headers[HttpRequestHeader.ContentType] = "application/json";

调用之前,结果还是没有变化。

我尝试按照该教程进行操作,但它是为控制台应用程序编写的,而且他们使用的是 HttpClient。我不能那样做,因为我不能进行异步调用。这将被网站使用。这就是我使用 WebClient 的原因。我还尝试将 StreamReader 与 HttpWebRequest 和 HttpWebResponse 一起使用,但它遇到的问题与我在使用 WebClient 时遇到的问题相同。

最佳答案

如果没有更多信息,则很难诊断您的问题。但是,我想说您的 Web API 很可能正在解释预期的响应类型并提供空结果,因为它不支持该类型的响应,例如 ASP .NET Web API 网站。

从这个意义上讲,DownloadString 表示它正在等待 text/html 响应。您可能应该下载带有 NuGet 的 Microsoft ASP .NET Web API 客户端库。该库将为您提供 HttpClient,它支持使用 application/jsonapplication/xml 等响应进行查询。

您可以查看有关如何调用 right here 的教程.

如果您希望它在您的网络浏览器中运行,您需要确保 Accept header 字段是正确的,正如您提到的那样。确保它正在使用 Fiddler 之类的工具与 IE 通信。

关于c# - 为什么我的 API 返回 {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18920330/

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