背景:

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

2:有用户举报了参数获取的问题。

3:JsonHelper的增强。

在综合下面的口径下,有了2.2版本的更新,也因此写了此文。

开源地址:

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

json 1

json,下边对增长的效能拓展介绍:

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请求,没发现浏览器发出预请求,可能场景或环境不同。

下边是一个简便的测试:

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

json 2

假若把跨域关闭:

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

结果是:

json 3

于是乎:框架默认是永葆跨域请求的,假如不想援助,可以关闭!

2:常规请求参数的收获

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

譬如请求:

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

对章程定义的主意是:

public  void Default(int id)
{

}

结果当然抛异常,找不到点子了,框架默认收集的都是无参数的艺术名。

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

下面介绍框架封装的拿到参数的主意:

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

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

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

2:Para参数

本着:/api/user/3这种参数,可以一贯拿Action参数(user)、Para参数就是3了(按:Controller/Action/Para这么个分隔模式)

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

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

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

json 4

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

原生的能够透过HttpInputStream流拿到,但框架举行了人性化的包裹:

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

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

实施输出的结果:

json 5

2:变态的GetJson():帮忙Get与Post的参数转Json

该模式不仅可以拿到直接Post的Json,还足以将a=1&b=2这种措施一向转Json返回,如:

发起呼吁:

json 6

请求结果:

json 7

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

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

1:对于Post或Get的例行参数:a=1&b=2这体系型的,除转json,也可以转实体:

倡导呼吁:

json 8

伸手结果:

json 9

以身作则为Get、Post的结果一致,不另截图!

2:GetEntity帮助无限级复杂嵌套

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

3:GetList<T>方法

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

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

上述为得到参数转Json的有关方法,分外实用!!!

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

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

总结:

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

迎接出席金牛的行列!

json 10

相关文章

网站地图xml地图