我创建了一个 .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 的接受标头,它在 Chrome 上返回 XML。它应该在 IE 上返回 JSON,但由于某种原因 JSON 是空的。
这是在我的 api 控制器中:
[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 遇到的问题相同。