天天看點

修改 mvc webapi 預設傳回 json 格式

web api 預設的已 xml 格式傳回資料

現在開發一般都是以 json 格式為主

下面配置讓 webapi 預設傳回 json ,在需要傳回 xml 時隻需要加一個查詢參數 datatype=xml 即可傳回 xml 格式資料

配置如下:

1.建立 一個 mvc webapi 項目 (framework4.0)

2.找到預設的 WebApiConfig.cs 檔案

3.修改 WebApiConfig.cs 檔案

<span style="font-family: Arial, Helvetica, sans-serif;">using System;</span>      
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;

namespace MvcWebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
        .......

            GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
            //預設傳回 json
            GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(
                new QueryStringMapping("datatype", "json", "application/json"));
            //傳回格式選擇 datatype 可以替換為任何參數 
            GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(
                new QueryStringMapping("datatype", "xml", "application/xml"));
        }
    }
}      

4.修改預設路由規則 WebApiConfig.cs 檔案中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Formatting;
using System.Web.Http;

namespace MvcWebApi
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
        //新加的規則
            config.Routes.MapHttpRoute(
                name: "DefaultApi2",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        //新加的規則
            config.Routes.MapHttpRoute(
                name: "DefaultApi1",
                routeTemplate: "api/{controller}/{action}",
                defaults: new { id = RouteParameter.Optional }
            );
        //預設路由 
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        。。。。。
        }
    }
}      

5.添加測試 action

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace MvcWebApi.Controllers
{
    public class ValuesController : ApiController
    {
        /// <summary>
        /// web api 預設将以 get 開頭的隻支援 get 請求,post 開頭的支援支 post 請求
        /// </summary>
        /// <returns></returns>
        [System.Web.Http.HttpGet]
        [System.Web.Http.HttpPost]
        public MyClass GetMyClass()
        {
            return new MyClass()
            {
                id=1111,
                name="張三",
                time=DateTime.Now
            };
        }
    }

    public class MyClass
    {
        public int id { set; get; }
        public string name { set; get; }
        public DateTime time { set; get; }
    }
}      

6.測試

請求位址:http://localhost:61667/api/values/getmyclass

響應内容:

{"id":1111,"name":"張三","time":"2015-09-29T16:43:07.4731034+08:00"}

請求位址:http://localhost:61667/api/values/getmyclass?datatype=xml

響應内容: