Taurus.MVC 2.2 开源发布:WebAPI 效率增强(请求跨域及Json转换)

前段时间的网红面包店Farine,它的受欢迎程度足以正印喜茶。不仅门店口大中士龙,而且也入选了沪上人气烘焙面包品牌,在香港完善开设分行。更吸引人注意的是,它拿走的大宗投资。

开源地址:

https://github.com/cyq1162/taurus.mvc

图片 1

上面对增长的功效拓展介绍:

可是再高的投资也抵可是商质料料差带来的恶劣影响。11月末,Farine被举报利用过期原料。经查证后,Farine的4家子集团及生产工厂都被责令停业,涉案的4人被刑事拘留,另有4人拔取取保候审等强制措施。因为商品质地差,不仅人赔进去了,而且投资也赔了。

下边是一个简单易行的测试:

在控制台(aries.cyqdata.com)发起一个跨域请求(http://localhost:13508/home/index):

图片 2

只要把跨域关闭:

<add key="IsAllowCORS" value="false"/>

结果是:

图片 3

于是:框架默认是帮助跨域请求的,假诺不想协助,可以关闭!

例如,会画画的“矿泉水”、跟竹子一起长大的竹子酒,还有紧随大热电视机剧《三生三世十里桃花》的同款产品桃花醉,都用高质料、新奇特拿到了加盟商、代理方的注重。除此之外,利民优选O2O线下体验店不到9万的出席店加盟金、不到16万的代理商加盟金都使其遭受了加盟商、代理方的青睐。以不到20万元的投入金去撬动更多的财力,这事真有可能。

上边介绍框架封装的取得参数的法子:

近年来最火热的网红奶茶店非喜茶莫属了。门店外动辄二、三十人的排队长龙,朋友圈一波波地晒照,都在展现着这网红美食的不凡魅力。不仅它的受欢迎程度令人好奇,它得到的投资金额也令人咂舌。停止目前,喜茶得到的投资总金额已经突破人民币1亿元,分别来自投资人何伯权、IDG资本等。

背景:

1:有用户反映了关于跨域请求的题目。

2:有用户反映了参数获取的题材。

3:JsonHelper的增强。

在综合下面的尺度下,有了2.2本子的换代,也由此写了此文。

尚未质地傍身的网红美食,固然有再高的投资赞助,也不得不是网上的大红人,在现实生活中无法生活。而假若又有质量又有投资,发展起来就如鱼得水。作为电商界的网红,利民优选及其O2O线下体验店同样因为货物受到低度关注。但又不同于其他网红美食,它对供货商、供货渠道的选料那些严格,才有了前几天质料高、特点显著的货色。

总结:

Taurus.MVC,在处理为WebAPI方面,仍遵行着简单实用高效的条件。

欢迎参加金牛的行列!

图片 4

为了保全持久的精力,网红美食不仅需要资本,更亟待增强质地。

2:Para参数

针对:/api/user/3这种参数,可以间接拿Action参数(user)、Para参数就是3了(按:Controller/Action/Para这么个分隔形式)

public override void Default()
{
   string para3 = Para;
}

相比较交通工具界的网红摩拜得到的6亿多先令的总斥资金额,喜茶的投资金额有点捉襟见肘。但与同等属于高效消费的饮品店相比,喜茶的1亿元特别贵重,因为投资这类饮品店需要担当的高风险较高。例如,一旦饮品店的食品安全出现问题,投资很可能就收不回去。

4:增强型的GetEntity<T>()方法

后天您吃网红了呢?这多少个网红不是指人,而是食物。不知什么日期起,网红不再单指一个人,食物也得以因为境遇网民的热捧而变成网红。而在这些网红美食迅速崛起的暗中,是上亿元的投资。

1:Query<T>(“字段”) (封装自Request)

针对:a=1&b=2这种Get或Post的参数,用Query<T>(“字段”)拿。

 public override void Default()
 {
    int id = Query<int>("id");
 }

1:有些场景,对方Post的数据,并不是key=value这种格式,而是:

图片 5

直白就是一串Json:({a:”1″,”b”:”2″})过来,这时候,常规的艺术是拿不到数量。

原生的能够透过HttpInputStream流得到,但框架进行了人性化的卷入:

经过GetJson()方法,可以收获:

 public override void Default()
 {
    Write(GetJson());
 }

履行输出的结果:

图片 6

2:变态的GetJson():辅助Get与Post的参数转Json

该方法不但可以拿到直接Post的Json,还足以将a=1&b=2这种措施直接转Json重临,如:

提倡呼吁:

图片 7

恳请结果:

图片 8

对于Post请求处理结果一致,就不另行截图了!

3:GetList<T>方法

暂未提供:对于Post的[{},{}]的Json数组转换,可以用:

List<AB> list = JsonHelper.ToList<AB>(GetJson());

上述为得到参数转Json的连带方法,非凡实用!!!

对此出口Json,用Write方法,可将复杂对象转换成Json。

上节:http://www.cnblogs.com/cyq1162/p/6069020.html 已介绍,不另行了。

1:对于Post或Get的正常化参数:a=1&b=2这序列型的,除转json,也足以转实体:

发起呼吁:

图片 9

请求结果:

图片 10

示范为Get、Post的结果一律,不另截图!

2:常规请求参数的取得

发觉有用户在应用Taurus.MVC时,思维还在逗留ASP.NET WebAPI。

诸如请求:

http://localhost:13508/api/default?id=1

对章程定义的方法是:

public  void Default(int id)
{

}

结果自然抛卓殊,找不到模式了,框架默认收集的都是无参数的点子名。

于是乎用户就懵了,不了解怎么拿参数,我也懵了,怎么能不知晓的,至少也应当清楚Request吧。

1:跨域请求

除开正常的的JsonP跨域,Html5起头襄助提升跨域,则变得尤其方便,只需要服务端请求头输出:

1  if (context.Request.UrlReferrer != null && context.Request.Url.Host != context.Request.UrlReferrer.Host)
2  {
3     //跨域访问
4     context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
5     context.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
6  }

如上代码:

1:可以通过检测来源的主机和请求的主机不一致判断是否跨域,如果是,则返回允许跨域标识。

2:第一个*表示允许任意请求,当然你也可以指定多个“http://a.com,http://b.com”.

3:第二个true表示允许跨域操作cookie,反之,则一行都不要出现,而不是设置为false。

其余,网上有随笔介绍说,跨域时,浏览器会爆发一个OPTIONS的预请求,于是框架也做出了拍卖:

1 if (context.Request.HttpMethod == "OPTIONS")
2 {
3   context.Response.StatusCode = 204;
4   context.Response.AppendHeader("Access-Control-Allow-Method", "GET,POST,PUT,DELETE");
5   context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
6   context.Response.AppendHeader("Access-Control-Allow-Headers", context.Request.Headers["Access-Control-Allow-Headers"]);
7   context.Response.End();
8 }

状态码204,比起200的功利,是不需要回到Conent内容,只回去请求头。

在Demo的时候,测试了刹那间Get请求,没觉察浏览器发出预请求,可能场景或条件不同。

2:GetEntity协理无限级复杂嵌套

你可以Post复杂的Json:{a:{b:2,c:3},f:[‘1′,’2’]}之类的,只要实体对应上,即可转换,不此外截图。

3:增强型的参数获取:GetJson方法