WebAPI服务返回值

Web API 2 Action Result 返回值

  • void
  • HttpResponseMessage
  • IHttpResponseMessage
  • Other Return Type

1void 返回值

返回空值204 (No content)
例:

 #region 空返回值
        [HttpGet]
        public void Post()
        {
            //Console.WriteLine("code good");
        }
Request URL:http://localhost:49064/Products/Post
Request Method:GET
Status Code:204 No Content
Remote Address:[::1]:49064
Referrer Policy:no-referrer-when-downgrade

2HttpResponseMessage 返回值

直接返回HTTP相应消息
例:

   public HttpResponseMessage GetProduct(int id)
        {
            var product = products.FirstOrDefault(p => p.Id == id);
            if (product == null)
            {
                //NotFound();
                HttpResponseMessage response1 = Request.CreateResponse(HttpStatusCode.NotFound, product);
                return response1;
            }
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, product);
            // response.Content = new StringContent(id.ToString(), Encoding.Unicode);
            response.Headers.CacheControl = new CacheControlHeaderValue()
            {
                // MaxAge = TimeSpan.FromMinutes(20)
                MaxAge = TimeSpan.FromMilliseconds(10000)//设置缓存时间
               
            };
            return response;
        }
Request URL:http://localhost:49064/Products/Post
Request Method:GET
Status Code:204 No Content
Remote Address:[::1]:49064
Referrer Policy:no-referrer-when-downgrade

3IHttpActionResult返回值

Web API 2中引入了IHttpActionResult,它实质上它定义了一个异步的HttpActionResult工厂方法

 //
    // 摘要:
    //     定义一个用于以异步方式创建 System.Net.Http.HttpResponseMessage 的命令。
    public interface IHttpActionResult
    {
        //
        // 摘要:
        //     以异步方式创建 System.Net.Http.HttpResponseMessage。
        //
        // 参数:
        //   cancellationToken:
        //     要监视的取消请求标记。
        //
        // 返回结果:
        //     在完成时包含 System.Net.Http.HttpResponseMessage 的任务。
        Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
    }

如果采用IHttpActionResult作为返回值,Web Api 将会异步的创建一个HttpResponseMessage类型对象,然后将它直接转化为Http相应。

下面是一个实现了接口IHttpActionResult的类TextResult,它将返回一个纯文本http相应

public class TextResult : IHttpActionResult
{
    string _value;
    HttpRequestMessage _request;

    public TextResult(string value, HttpRequestMessage request)
    {
        _value = value;
        _request = request;
    }
    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var response = new HttpResponseMessage()
        {
            Content = new StringContent(_value),
            RequestMessage = _request
        };
        return Task.FromResult(response);
    }
}

例:

 public IHttpActionResult GetData()
        {
            return new TextResult("纯文本信息", Request);
        }
image.png
image.png

4其他返回类型

For all other return types, Web API uses a media formatter to serialize the return value. Web API writes the serialized value into the response body. The response status code is 200 (OK).
对于其他的返回类型,WebAPI根据媒体类型(MIME)格式化器序列化返回值,然后将其作为Http响应的内容,并且http响应码都是200.
例:

       /// <summary>
        /// 其他返回类型        
        /// </summary>
        /// <returns></returns>
        public IEnumerable<Product> GetALL()
        {
            return products;
        }

页面调用

 $(document).ready(function () {
      // Send an AJAX request
        $.getJSON("Products/GetALL")
          .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
              // Add a list item for the product.
              $('<li>', { text: formatItem(item) }).appendTo($('#product'));
            });
          });
    });

值:

[{"Id":1,"Name":"Hado Daved","Category":"fhjfs","Price":1.0,"start":"2017-09-29T15:12:27.1855723+08:00"},{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75,"start":"2017-09-29T07:12:27.1855723Z"},{"Id":3,"Name":"Hammer","Category":"Hardware","Price":16.99,"start":"2017-09-29T15:12:27.1855723+08:00"}]

页面通过异步AJAX调用Web
后台GetALL()方法根据请求的media formatter格式,将数据序列化为json数据。
请求的media formatter类型在HTTP请求响应报文中:

image.png

Web API uses the Accept header in the request to choose the formatter. For more information, see Content Negotiation.
Web API 不只在其他返回值类型,在上述所有的返回值类型中,Web API 实质上都是通过HTTP响应报文的media formatter格式来序列化返回值,(这个请求格式封装在请求上下文的Request对象的Accept header属性中)

如还是请求上文的其他返回值类型 GetALL()方法,这次不通过异步调用,直接在浏览器地址调用

image.png

从图上可以看出请求的是文本类型,响应的也是文本类型。


image.png

WebAPI序列化后的时间数据格式<start>2017-09-29T15:32:27.5102052+08:00</start>,对于使用过JSON.NET的不会陌生,WEBAPI的序列化方法正是采用的JSON.NET,这比asp.net mvc 的json序列化方法(JavaScriptSerializer)性能高得多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容