【发布时间】:2015-10-28 08:48:17
【问题描述】:
我一直在搜索这个论坛和其他论坛来解决一个看似简单的问题。目标是调用 2 个 API 并对收到的数据进行一些计算。但是,当我从下面的代码调用任何 API 时,对 PostAsJsonAsync 调用没有响应。调试显示该命令已执行,但此调用之后的代码从未执行。我确实在 Chrome 开发者工具中收到以下消息。
'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-2-130904674774978518):已加载 'C:\Users\ADMIN\AppData\Local\Temp\Temporary ASP.NET 文件\vs\6d7d5266\5b17a55b\App_Web_vu1twtot.dll'。找不到或无法打开 PDB 文件。 'iisexpress.exe' (CLR v4.0.30319: /LM/W3SVC/2/ROOT-2-130904674774978518):已加载 'C:\Users\ADMIN\AppData\Local\Temp\Temporary ASP.NET 文件\vs\6d7d5266\5b17a55b\App_Web_h35301am.dll'。
线程 0x3b1c 以代码 0 (0x0) 退出。 线程 0x34a4 已退出,代码为 0 (0x0)。
所使用的 API 是来自 http://jsonplaceholder.typicode.com/ 的简单假 API。 如果我在 JS 中使用 Ajax,这个 API 和我测试过的其他 API 响应良好。请帮帮我。
以下代码取自http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client 的 ASP.NET 教程
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
public class Product
{
public double userid { get; set; }
public double id { get; set; }
public string title { get; set; }
public string body { get; set; }
}
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
RunAsync().Wait();
}
static async Task RunAsync()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://jsonplaceholder.typicode.com");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// HTTP POST
var gizmo = new Product() { userid = 11, id = 100, title = "Widget11", body = "Widget11" };
HttpResponseMessage response = await client.PostAsJsonAsync("/posts/1", gizmo);
if (response.IsSuccessStatusCode)
{
}
}
}
}
【问题讨论】:
-
根据REST API,调用时不需要添加请求头。您可以尝试删除代码行吗:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); -
试过了,但没用。 Aizad Ahmed 下面的解决方案奏效了。