November 19th, 2016

     今天是生日吼,这一天会觉得有那么一点点的放松,但是并没有怎么过,中午泡面凑合一顿,晚上一顿驴火。最近出差很忙,今天是周日,我周四才从杭州赶回来,在那边已经呆了三周了。这次回来主要是因为有一个面试,普华永道的,越临近日期反而开始期待。对于这次面试并没有什么准备。去了之后,环境不错的,面试一共两个人,第一个人主打技术,第二个人,妈嘞,问题非常刁钻,咄咄逼人,因为并没有思想准备所以一上来还是挺蒙的,至于结果如何,也不重要了,等出差完了再认真投简历吧。
      还一件事儿,就是一冲动买了罗技G29,很多游戏不配套啊,麻烦死了,折腾好久才能玩,但是玩起来的感觉真的just so so啊,好无聊,装了一个尘埃拉力,太难了!玩不起来!!现在已经被我装箱子,打算卖掉…哭😭花了钱也很伤心…..
       下面的图是楼顶拍的哟,很适合烧烤party,浙江信息院楼顶。
      

Web Api 2 中关于Action返回值的详细介绍

原创文章转载请注明出处

本文介绍WebApi2如何将action中的结果返回至Http输出中。
 
一个WebApi Controller可以返回以下任意一种类型:
   1.void
   2.HttpReponseMessage
   3.IHttpActionResult
   4.其他类型
 
依据不同返回类型,WebApi会选择不同的机制来创建Http Reponse
 

例子:
 
 
1.void
WebApi会简单的返回空消息,状态码为204
 
public class ValuesController : ApiController
{
    public void Post()
    {
    }
}
 
HTTP 返回:
HTTP/1.1 204 No Content
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 02:13:26 GMT
 
2.HttpResponseMessage
WepApi会直接将值写入到Http响应中去。你可以使用一些选项在输出之前对http响应做一些控制,例如,可以控制Cache-Control头。
public class ValuesController : ApiController
{
    public HttpResponseMessage Get()
    {
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, “value”);
        response.Content = new StringContent(“hello”, Encoding.Unicode);
        response.Headers.CacheControl = new CacheControlHeaderValue()
        {
            MaxAge = TimeSpan.FromMinutes(20)
        };
        return response;
    }
}
 
Response:
HTTP/1.1 200 OK
Cache-Control: max-age=1200
Content-Length: 10
Content-Type: text/plain; charset=utf-16
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 08:53:35 GMT
hello
 
如果你将一个领域模型对象传递给CreateReponse方法,WebApi会自动调用media formatter将模型序列化后写入到Http响应中。
public HttpResponseMessage Get()
{
    // Get a list of products from a database.
    IEnumerable<Product> products = GetProductsFromDB();
         // Write the list to the response body.
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, products);
    return response;
}
WebApi根据Http请求中的Accept头来选择具体使用哪个序列化器,更多信息参见 Content Negotiation.
 
3.IHttpActionResult
该接口本质上,定义了一个HttpReponseMessage工厂,使用IHttpActionResult有一些优势如下:

  • 简化Controller的单元测试 unit testing 
  • 将创建Http响应的通用逻辑移动到单独的类中(Moves common logic for creating HTTP responses into separate classes)
  • 通过隐藏创建响应的底层代码,使Controller、aciton的变得更清晰。

 
该接口定义了一个方法ExecuteAsync,用来创建HttpReponseMessage实例
public interface IHttpActionResult
{
    Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
}

所以,当Action返回一个IHttpActionResult接口的时候,WebApi会调用ExecuteAsync方法生成HttpReponseMessage实例,然后HttpReponseMessage实例会将信息写入到Http响应中返回给用户。
下面是一个简单的继承IHttpActionResult接口,返回给客户端一个文本信息的例子:
继承:
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);
    }
}
Controller:
public class ValuesController : ApiController
{
    public IHttpActionResult Get()
    {
        return new TextResult(“hello”, Request);
    }
}
Response:
HTTP/1.1 200 OK
Content-Length: 5
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 08:53:35 GMT
hello
 
但是,通常情况下我们会使用System.Web.Http.Results命名空间中的IHttpActionResult实现类。并且ApiController的一些内建辅助类可以返回这些实现类。
在下面的例子中,如果没有找到对应的产品ID,则会调用ApiController.NotFound返回一个404的IHttpActionResult的实例。否则的话,调用ApiController.OK返回一个包含产品信息的200状态的结果。
public IHttpActionResult Get (int id)
{
    Product product = _repository.Get (id);
    if (product == null)
    {
        return NotFound(); // Returns a NotFoundResult
    }
    return Ok(product);  // Returns an OkNegotiatedContentResult
}
 
4.Other Return Types其他返回类型
对于其他返回类型,WepApi会调用media formatter来序列化对象,还记得前面讲的吗,WebApi会根据请求中ACCEPT头来自动选择formatter(Content Negotiation)。然后将序列化结果写入到响应信息中。
public class ProductsController : ApiController
{
    public IEnumerable<Product> Get()
    {
        return GetAllProductsFromDB();//将会序列化
    }
}

注意:因为返回的是自定义类型,所以你不能直接指定返回错误代码404等,但是你可以通过抛出HttpResponseException 异常来指定错误代码,更多信息请看
 Exception Handling in ASP.NET Web API.
 
请求信息:
GET http://localhost/api/products HTTP/1.1
User-Agent: Fiddler
Host: localhost:24127
Accept: application/json
 
相应信息:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
Date: Mon, 27 Jan 2014 08:53:35 GMT
Content-Length: 56
[{“Id”:1,”Name”:”Yo-yo”,”Category”:”Toys”,”Price”:6.95}]

October 23rd, 2016

    十分的矛盾,没想到事情好转之后自己会走的这么快,矛盾,近了不行远了也不行,而又没有那么多时间,却因为这个性格不得不犹犹豫豫的,下不了决心。

October 09th, 2016

   国庆节前后经历了一场购房选房的折腾,突如其来的新政策,让人措手不及,过节回家这几天也是很累,脾气都控制不住的要爆发冲突,累的要死。这段时间疲惫的不行。哦不,其实这一年多都挺疲惫,然后又很多事情都赶到了一起,也体会到了攒钱的重要性和借钱的不容易,想挣大钱又看不上小钱,以不屑攒小钱为借口去懒惰,去放纵自己是不行的。这个阶段只能积细流成湖泊,因为你已经耽误太多时间啦!
   这两天想了想,这么久以来,负能量太多了,我得赶紧去改变自己。

September 26th, 2016

    本来是定的昨天来杭州出差,可是因为考虑到今天应该到公积金中心咨询一下贷款事宜,所以把车票改到了今天晚上,但是没想到上午出奇的顺利,之后便感觉待在北京也无聊,不如再将车票改签到下午吧,就这样,下午三点就登上了开往杭州的高铁。一路上看了两部电影,六个小时居然都没有站起来,其实是因为旁边还有两个人,走过去非常麻烦,所以就没有动。
     其实还是挺喜欢杭州,没有北京那么喧嚣(只是相对),湿润的空气,相对人少的街道,感觉每天会塞到脑袋里的烦恼也变少了。也许远离了呆了很久的北京,也会有一种自由的感觉吧。

也许你不够努力

    这几天就被一件事搞得不开心,之前说好的一块来做,怎么就自己去做了呢,说什么顾虑比较多,我实在不太能完全相信这样的说法,难道不是不想多一个人分利润吗?如果是这样,那也够过分了吧,什么也不和我说,私下就没我的事儿了?再笨的人也不该这么不会做事吧。
    事后反思自己,除了有种被过河拆桥的感觉让我十分不舒服之外,本来可以到手的钱等于就飞了,当然,前者比重占的较大,但是这一点不是我的错,也不是我能控制的,我能够控制的也许就是后者那40%。那么既然说到这40%,我想既然能够为这不到一万块钱而生气,那也只能说明了一万块在我心中是比较重要的,也说明我的窘迫现状。所以说也许是我平时不够努力,才导致了在这点钱面前的不开心。
    有的时候觉得自己很努力,每天回来多多少少抽点时间看看专业方面的东西,但是细细想来,自己也有很多时间在做一些毫无意义的事情,有些时候也会偷懒,也有很多惰性,所以这不能算真正的努力,只是看起来很努力。

August 28th, 2016

   今天给家打电话,结果又是一顿吵,主题就是….老生常谈了,呵呵,真的是头很大,错综复杂,理不清还乱,很多事情根本无法达到自己想要的平衡,也不是自己一个人的意见或者想法能够决定的。本来最近的状态就非常糟,现在更是糟透。发现现在的文章都是负能量居多,真不知道是怎么了,也许就是因为当下该实现的事情都没有实现吧,对现在生活状态不满,对生活期望的过高。
   很多事不愿意说,也不愿意在这说,没地儿说,也不希望被问。
   那么,该如何改变现状呢?
   对理想的期盼值不要太高,理想是好的,但是不是那么容易的,需要努力和时间但依然也许可能达不到,那么这段时期要学会踏实下来过平淡的日子,理想很美好,现实很骨感,放弃幻想,换成梦想。
   关于婚姻,总觉得年纪不小了,慢慢的很多事都会赶不上,自己该能做的就是再踏实一点,有些东西其实并没有那么重要,都一样。
   现在房价天天涨,就好像你这一刻看到一个数字,当你感叹房价高的时候,再一瞅就已经变了,只剩下你一脸惊讶的瞅着他还在不停地涨,涨上去的是数字,离你越来越远的是北京,仿佛脚下膨胀起了气球将你带离地面飘向不知何处的地方。
   所以只能还是尽早买,这个月再张罗张罗吧,工作就跳了吧,老墨迹啥呢,天下没有不散的宴席,别说公司了,就连这个世界都只不过是来做客而已,难道还能一直活着吗?
    人生总会有非常非常多的不如意,每个人都期望他能变得更完美一些,灰姑娘找到王子,走失的孩子能找到家,穷人总有钱花,在耶稣面前祷告愿望就能实现,但是是不可能的,你需要对世界稍微狠一些,这不是坏,而是本来就应该这样。

August 24th, 2016

  每次更新都是过大半年,不知道从什么时候起,中国的防火墙屏蔽了一些东西,导致我的博客访问起来会很慢。现状就是各种纠结左右为难,每天在不安中度过。
  燕郊的房子又涨了,真是令人开心,如果不在北京,等涨到高点卖掉,那日子得过得嗨皮的不行,最近本来说准备在房山再买一个,但是种种因素后来放弃了,但是我想应该不会拖得太久吧,会再去看看,感觉现在就快是北京购房的末班车,再晚两年彻底没希望了,因为太贵。自己也想了想,北京户口无非就是对孩子考学有好处,自己的养老有好处,如果孩子整齐,自己又能多挣些钱,那么北京户口的吸引力也就没那么大了吧,砸破脑袋的钻真的没那么多必要,毕竟现在越来越觉得如果愿望不一定能实现,那么保持快乐就是最重要的,当然,愿望还是要继续努力的。
  睡眠每天都严重不足,别人看来就是晚睡综合征,其实仔细想想是因为总觉得每天都不够充实,如果不再多干些事情会空虚,所以不管去做什么都习惯性的拖到很晚,去做一些有意义或者没意义的事,焦虑是主旋律。
​  困了困了,睡觉吧😴

围场归来

   写之前还想着要好好写点什么,一打开编辑器,就什么都不想写了,犯懒,懒得总结懒得想。没玩没了的烦躁焦虑,原因是多方面的,处于多种矛盾状态。
   昨天从围场县回来,开车太累了,晚上开着车跟做梦似的,拍拍脸都不好使,半夜三点才到家,有个毛病就是太累了反而睡不好,所以六点就醒了,累啊,到了下午一闭眼都是在坑坑洼洼的路面上行车。
   返程的时候有一段四御线,我真是后悔了选择这条路,路上布满了坑洼,柏油路由于偷工减料到处都是烂掉的路面,最深的有半个车轮那么深,而且到处都是,整整持续了80公里长!我简直这个崩溃啊,车都快颠烂了,足足开了两个小时,我觉得这段路下来完全可以参加绕桩大赛了!驶出这段烂路之后总算是正常的道路,当然了,依然是山路,开的颇有秋名山车神的意思,哈哈,进入高速的时候已经是晚上七点半了,这一路困得我,真是不行不行的,三次在服务区停车休息,高速驾驶最重要的就是不能疲劳,然后就是不能超速。就可着限速开吧,前四个小时限速100,后一个半小时是限速120,过两天查查,希望没有违章,不然亏大了。