找回密码
 会员注册
查看: 121|回复: 0

Asp.net webAPI返回JSON格式数据

[复制链接]

250

主题

1

回帖

819

积分

管理员

积分
819
发表于 2024-2-29 08:37:08 | 显示全部楼层 |阅读模式

ASP.NET Web API 是新一代的 HTTP 网络服务开发框架,除了可以透过 Visual Studio 2012 快速开发外 (内建于 ASP.NET MVC 4 的 Web API 项目模板内),也非常适合用于各种跨平台的行动装置上,如果你想开发 RESTful 应用程序,那么使用 ASP.NET Web API 应该是挺理想的解决方案。不过 ASP.NET Web API 内建支持 JSON 与 XML 两种输出格式,并依据浏览器端送出的 Accept 标头自动决定响应的内容格式,不过也因为这点让有些 Web API 新手上路的开发人员来说似乎颇为困扰,本文将介绍如何让 ASP.NET Web API 强迫响应 JSON 结果,以方便直接用任何浏览器都能看见 JSON 的执行结果。

使用瀏覽器測試 ASP.NET Web API 的結果

我們先新增一個 ASP.NET MVC 4 專案:

接著選擇 Web API 範本:

以下是建立好 Web API 專案的預設控制器畫面,在預設的 Get() 方法也包含了一些預設資料:

這時可以直接啟動專案:

第一次啟動後必須先將網址路徑改為 /api/values 才能看到預設的 ValuesController 執行結果,如果我們用 IE9 開啟該網址,你將看不到內容,而是直接提示下載:

打開下載後的檔案內容是 JSON 格式:

不過,由於使用 IE 每次想看 Web API 的結果都要下載檔案並用其他文字編輯器開啟內容非常麻煩。

如果我們改用 Google Chrome 連結完全相同的網址,看到的結果卻是一份 XML 格式的結果,並不是 JSON 格式,如下圖示:

 

ASP.NET Web API 如何自動判別用戶端的 HTTP 要求資訊並回傳相應的結果格式

由於 ASP.NET Web API 是依據瀏覽器端送出的 Accept 標頭自動決定回應的內容格式,如果要進一步分析其技術細節,可以使用 Fiddler 這套 HTTP 封包分析軟體幫我們查看到底瀏覽器送出了哪些 HTTP 標頭到伺服器端。

我們先看看 IE9 到底送了什麼 HTTP 要求標頭 (Request Headers) 過去,如下圖示:

你可以看見 Accept 標頭內容包括了 text/htmlapplication/xhtml+xml*/* 這三項,而這三項並不在 ASP.NET Web API 的 XmlFormatter 的支援媒體類型裡,所以 IE9 回應了 JSON 這個預設格式:

  1. Accept: text/html, application/xhtml+xml, */*
复制代码

我們再來看看 Google Chrome 送出的 HTTP 要求標頭 (Request Headers),如下圖示:

你可以看見 Accept 標頭內容包括了 text/htmlapplication/xhtml+xmlapplication/xml*/* 這四項,而 application/xml 這項正好是 ASP.NET Web API 的 XmlFormatter 所支援的媒體類型之一,因此 Google Chrome 便回應了 XML 格式:

  1. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
复制代码

 

修正 ASP.NET Web API 的 XmlFormatter 所支援的媒體類型(MediaType)

由於對單純想看 JSON 回應結果的開發人員來說,每次都用 Fiddler 實在太麻煩了,如果我們的 Web API 完全不需要回應 XML 格式的話,你可以選擇將 XML 回應支援的回應給關閉,其程式碼相當簡單,只要將以下這行程式碼放到 Global.asax 檔案的 Application_Start() 事件裡(此檔第一行最後一行都可以),即可完成設定:

  1. GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
复制代码

設定好後的示意圖如下:

修正完畢,按下 F6 ( 或 Ctrl + Shift + B ) 重新組建方案 (Build),再重新在瀏覽器中查看相同的位址,就可以發現回應的結果變成 JSON 格式了,如下圖示:

如果我們在 Visual Studio 2012 中下達中斷點,你也可以看見 ASP.NET Web API 裡的 XmlFormatter 所內建支援的所有媒體類型有哪些,如下圖示你應該可以發現是 application/xmltext/xml 這兩個:

同時我們也可以利用「監看式窗格」查看 ASP.NET Web API 裡的 JsonFormatter 所內建支援的所有媒體類型有 application/jsontext/json 這兩個:

 

转:https://www.cnblogs.com/mooncher/p/3794422.html


来源:https://blog.csdn.net/keebai/article/details/89024993
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 11:24 , Processed in 0.330321 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表