瀏覽器直接訪問 Web API 可正常返回 JSON,但在另一專案中「添加 Web 引用」調用卻報錯。原因在於「Web 引用」預期的是 XML 格式的 SOAP 服務,而非 RESTful JSON。
using (var client = new HttpClient()) {
client.BaseAddress = new Uri("https://api.example.com/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync("api/values");
var json = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject(json);
}
在 WebApiConfig.cs 中移除 JSON 格式化器或添加 XML 格式化器:
config.Formatters.Remove(config.Formatters.JsonFormatter);
config.Formatters.Add(new XmlMediaTypeFormatter());
但這違背 REST 設計初衷,不建議長期使用。
若必須使用「Web 引用」,可建立 .asmx 服務,原生支持 SOAP/XML。
RESTful API 應使用 HttpClient/HttpWebRequest 直接調用,而非「Web 引用」。 兩者屬於不同架構風格,強行融合只會增加維護成本。