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

by admin on 2018年10月26日

背景:

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

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

3:JsonHelper的增强。

每当综合上面的规则下,有矣2.2本子的创新,也因此写了此文。

背景:

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

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

3:JsonHelper的增强。

当综合上面的口径下,有了2.2本的创新,也因而写了此文。

开源地址:

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

图片 1

下面对增长的作用拓展介绍:

开源地址:

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

图片 2

下对加强的职能拓展介绍:

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

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):

图片 3

使将跨域关闭:

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

结果是:

图片 4

乃:框架默认是支撑跨域请求的,如果不思支持,可以关闭!

下是一个概括的测试:

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

图片 5

假若将跨域关闭:

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

结果是:

图片 6

遂:框架默认是支撑跨域请求的,如果未思支持,可以关闭!

2:常规请求参数的得到

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

论要:

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

本着艺术定义之办法是:

public  void Default(int id)
{

}

结果本来抛大,找不交方法了,框架默认收集之还是无论参数的方名。

乃用户就是不灵了,不亮怎么将参数,我呢懵了,怎么能够免知底的,至少也该明了Request吧。

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");
 }

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;
}

2:Para参数

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

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

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

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

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

图片 7

直就是是一致拧Json:({a:”1″,”b”:”2″})过来,这时候,常规的主意是用不交数。

原生的好经HttpInputStream流拿到,但框架进行了人性化的包裹:

通过GetJson()方法,可以取得:

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

推行输出的结果:

图片 8

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

图片 9

直接就是是同等差Json:({a:”1″,”b”:”2″})过来,这时候,常规的主意是将不交数量。

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

透过GetJson()方法,可以取得:

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

施行输出的结果:

图片 10

2:变态的GetJson():支持Get与Post的参数转Json

拖欠方式不仅可用到直Post的Json,还可以拿a=1&b=2这种办法一直转Json返回,如:

提倡呼吁:

图片 11

呼吁结果:

图片 12

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

2:变态的GetJson():支持Get与Post的参数转Json

拖欠措施不但可以将到直接Post的Json,还可以a=1&b=2这种方法直接转Json返回,如:

倡议呼吁:

图片 13

呼吁结果:

图片 14

对此Post请求处理结果一致,就不更截图了!

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

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

1:对于Post或Get的健康参数:a=1&b=2这种类型的,除转json,也足以转实体:

发起呼吁:

图片 15

恳请结果:

图片 16

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

1:对于Post或Get的正规参数:a=1&b=2这种类型的,除转json,也堪转实体:

倡导呼吁:

图片 17

吁结果:

图片 18

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

2:GetEntity支持无限级复杂嵌套

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

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 已介绍,不又了。

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方面,仍遵行着简单实用高效之条件。

迎加入金牛的序列!

图片 19

总结:

Taurus.MVC,在拍卖啊WebAPI方面,仍遵行着简单实用高效的标准化。

接加入金牛的班!

图片 20

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图