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/html、application/xhtml+xml 與 */* 這三項,而這三項並不在 ASP.NET Web API 的 XmlFormatter 的支援媒體類型裡,所以 IE9 回應了 JSON 這個預設格式:

Accept: text/html, application/xhtml+xml, */*

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

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

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() 事件裡(此檔第一行或最後一行都可以),即可完成設定:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

設定好後的示意圖如下:

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

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

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

如何让Asp.net webAPI返回JSON格式数据的更多相关文章

  1. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  2. webapi返回json格式优化

    一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 config.Formatters.Remove(config.For ...

  3. webapi返回json格式,并定义日期解析格式

    1.webapi返回json格式 var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferen ...

  4. (转)WebApi返回Json格式字符串

    原文地址:https://www.cnblogs.com/elvinle/p/6252065.html WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉 ...

  5. WebAPI搭建(二) 让WebAPI 返回JSON格式的数据

    在RestFul风格盛行的年代,对接接口大多数人会选择使用JSON,XML和JSON的对比传送(http://blog.csdn.net/liaomin416100569/article/detail ...

  6. webapi返回json格式优化 转载https://www.cnblogs.com/GarsonZhang/p/5322747.html

    一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 1 config.Formatters.Remove(config.F ...

  7. WCF兼容WebAPI输出Json格式数据,从此WCF一举两得

    问题起源: 很多时候为了业务层调用(后台代码),一些公共服务就独立成了WCF,使用起来非常方便,添加服务引用,然后简单配置就可以调用了. 如果这个时候Web站点页面需要调用怎么办呢? 复杂的XML , ...

  8. WebService返回json格式数据供苹果或者安卓程序调用

    1.新建一个WebService. 2. /// <summary> /// DemoToJson 的摘要说明 /// </summary> [WebService(Names ...

  9. 使用jQuery发送POST,Ajax请求返回JSON格式数据

    问题: 使用jQuery POST提交数据到PHP文件, PHP返回的json_encode后的数组数据,但jQuery接收到的数据不能解析为JSON对象,而是字符串{"code" ...

随机推荐

  1. shiro安全框架

    原文:http://blog.csdn.net/boonya/article/details/8233303 可能大家早先会见过 J-security,这个是 Shiro 的前身.在 2009 年 3 ...

  2. ServletContext2

    ------------ContextServlet.java--------------节选-- protected void doGet(HttpServletRequest request, H ...

  3. 深入浅出之Smarty模板引擎工作机制(二)

    源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...

  4. QM04-生产中的QM

    集成的计划 生产过程中的生产工序和检验工序逐渐变得更为相互依赖或者说被组合在一起.从而使来自生产和质量检验领域的工作小组共同创建工艺流程. 检验工序 可以把QM检验特性集成到生产计划(PP)模块的工作 ...

  5. Nginx目录保护、防盗链、限速及多域名处理

    http://www.opsers.org/server/nginx-directory-protection-anti-hotlinking-processing-speed-and-multi-d ...

  6. easyui textarea IE8中无法换行

    经查 原代码textarea 应用了"textbox"css样式. 默认 white-space:nowrap; 修改为 "nornal",问题解决.

  7. php使用技巧--之链接地址

    高效PHP程序必知的53个技巧 http://developer.51cto.com/art/201105/265953.htm 非常实用 十个PHP高级应用技巧 http://developer.5 ...

  8. ASP.NET MVC and jqGrid 学习笔记 3-如何从数据库获得数据

    实际应用中,大部分都是从数据库里获得数据,所以先建立一个数据库,Database first 或者Code first都可以,这里用Code first. 一.Model public class M ...

  9. rpm命令使用说明

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  10. Jedis操作Redis数据库

    添加Maven依赖: <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</grou ...