背景:

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

2:有用户反馈了参数获取的问题。

3:JsonHelper的增强。

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

开源地址:

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

下面对增强的功能进行介绍:

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
3
4
5
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):

如果把跨域关闭:

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

结果是:

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

2:常规请求参数的获取

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

比如请求:

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

对方法定义的方法是:

?
1
2
3
4
public  void Default(int id)
{
           
}

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

于是用户就懵了,不知道怎么拿参数,我也懵了,怎么能不知道的,至少也应该知道Request吧。

下面介绍框架封装的获取参数的方法:

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

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

?
1
2
3
4
 public override void Default()
 {
    int id = Query<int>("id");
 }

2:Para参数

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

?
1
2
3
4
public override void Default()
{
   string para3 = Para;

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

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

直接就是一串Json:({a:"1","b":"2"})过来,这时候,常规的方法是拿不到数据。

原生的可以通过HttpInputStream流拿到,但框架进行了人性化的封装:

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

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

执行输出的结果:

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

该方法不仅可以拿到直接Post的Json,还可以将a=1&b=2这种方式直接转Json返回,如:

发起请求:

请求结果:

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

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

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

发起请求:

请求结果:

演示为Get、Post的结果一致,不另截图!

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

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

3:GetList<T>方法

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

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

以上为获取参数转Json的相关方法,非常实用!!!

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

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

总结:

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

欢迎加入金牛的行列!

本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/1880762,如需转载请自行联系原作者

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

  1. Taurus.MVC 2.0 开源发布:WebAPI开发教程

    背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...

  2. ASP.Net中关于WebAPI与Ajax进行跨域数据交互时Cookies数据的传递

    本文主要介绍了ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据传递的相关知识.具有很好的参考价值.下面跟着小编一起来看下吧 前言 最近公司项目进行架构调整,由原来的三层架构改 ...

  3. WebApi开启CORS支持跨域POST

    概念:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpRequest请求 ...

  4. 浏览器踩坑:浏览器访问已发布服务器的网址显示跨域,但微信浏览器可以正常访问,别人的浏览器也可以正常访问

    问题描述 您是否遇到这样的问题? 本地打包部署到服务器上后,访问链接登不进去系统,控制台提示跨域问题. 如果您遇到这样的问题,恭喜您!不用再东奔西跑查找问题了,这里有详细的解决方案-->> ...

  5. linux兼容性,Atom 1.23发布:功能增强,兼容性更好

    导读 GitHub发布了Atom 1.23,这是开源和跨平台文本编辑器的月度更新.除了一个月的增强功能,Atom 1.23附带了一个用于注册URI处理程序函数的包的功能,当用户访问一个以"a ...

  6. Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)

    前言: 前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时, 有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子. 我一不小心回了句:等回广州我再写篇文章 ...

  7. Taurus.MVC 如何升级并运行在NET6、NET7

    前言: 之前计划帮某公司架构一个从WPF转向Web的低代码的开发平台,并构思为Taurus.MVC 新增微服务的基础功能模块,提供便捷的微服务开发方式,因中途合作中止,代码开发部分后续再上. 最近看到 ...

  8. 第四节:跨域请求的解决方案和WebApi特有的处理方式

    一. 简介 前言: 跨域问题发生在Javascript发起Ajax调用,其根本原因是因为浏览器对于这种请求,所给予的权限是较低的,通常只允许调用本域中的资源, 除非目标服务器明确地告知它允许跨域调用. ...

  9. 第十八节:跨域请求的解决方案和WebApi特有的处理方式

    一. 简介 前言: 跨域问题发生在Javascript发起Ajax调用,其根本原因是因为浏览器对于这种请求,所给予的权限是较低的,通常只允许调用本域中的资源, 除非目标服务器明确地告知它允许跨域调用. ...

最新文章

  1. easyopen原理解析——不到100行代码实现一个最精简的easyopen
  2. Google Earth Pro 模拟飞行 分享
  3. javaBean 转json指定key-value个数
  4. 基于Boost.Thread 的测试
  5. [AHOI2009]最小割(最大流+tarjan)
  6. eclipselink mysql_Eclipselink更新现有表
  7. 对DNN的一些高层架构设想
  8. 服务器系统咋关机呀,各种服务器系统的关机
  9. 挖矿木马 sustes 追踪溯源分析
  10. Facebook登陆服务器校验,权限请求以及数据获取
  11. android dropbox切换账户,在Android上自动同步Dropbox | MOS86
  12. 一个文本回射C/S程序并讨论:fork、信号处理机制、僵死进程处理
  13. 千亿级宠物赛道,卖蚊香的朝云能“掘金”多少?
  14. spark-2.2.0发行说明
  15. 保研/面试复习-数据结构与算法-万字总结(近三万字)
  16. python - alipay sdk 使用 及 注意点
  17. c语言读png图片非隔行扫描,北京大学计算概论C语言经典课件Lecture4信息显示与多媒体技术.ppt...
  18. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...
  19. UR10机械臂+Realsense手眼标定
  20. 计算机毕设智能大棚,本科毕设论文-智能大棚管理系统设计论文.doc

热门文章

  1. jboss7 配置oracle11g数据源,oracle11g – JBoss AS 7.1.1下的奇怪的Oracle 11g JDBC驱动程序错误...
  2. Java程序设计复习笔记 | 超详细
  3. php 帝国论坛,帝国cms7.5整合论坛程序discuzX3.2同时登陆退出
  4. 为什么matlab激活完后还要激活(Matlab2012b license失效解决办法)
  5. SuperMap iClient3D for WebGL教程 Primitive
  6. 游戏陪玩APP开发的功能和特点
  7. python中的解包操作
  8. ​​电源完整性仿真案例
  9. linux开发环境基础搭建
  10. 2022-2028全球及中国自助终端系统(SSTS)行业研究及十四五规划分析报告