背景:

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

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

3:JsonHelper的增强。

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

开源地址:

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

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

1:跨域请求

除了常规的的JsonP跨域,Html5开始支持增强跨域,则变得更为方便,只需要服务端请求头输出:

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

如上代码:

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

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

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

另外,网上有文章介绍说,跨域时,浏览器会发出一个OPTIONS的预请求,于是框架也做出了处理:

 if (context.Request.HttpMethod == "OPTIONS")
{
context.Response.StatusCode = ;
context.Response.AppendHeader("Access-Control-Allow-Method", "GET,POST,PUT,DELETE");
context.Response.AppendHeader("Access-Control-Allow-Origin", "*");
context.Response.AppendHeader("Access-Control-Allow-Headers", context.Request.Headers["Access-Control-Allow-Headers"]);
context.Response.End();
}

状态码204,比起200的好处,是不需要返回Conent内容,只返回请求头。

在Demo的时候,测试了一下Get请求,没发现浏览器发出预请求,可能场景或环境不同。

下面是一个简单的测试:

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

如果把跨域关闭:

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

结果是:

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

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:({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数组转换,可以用:

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

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

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

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

总结:

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

欢迎加入金牛的行列!

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)的更多相关文章

  1. GJM : Taurus.MVC 2.0 开源发布:WebAPI开发教程 [转载]

    Taurus.MVC 2.0 开源发布:WebAPI开发教程 转载自http://www.cnblogs.com/cyq1162/p/6069020.html 因是新手  粘贴时有一个版权问题 本文原 ...

  2. Taurus.MVC 2.3 开源发布:增强属性Require验证功能,自带WebAPI文档生成功能

    背景: 上周,把 Taurus.MVC 在 Linux (CentOS7) 上部署任务完成后. 也不知怎么的,忽然就想给框架集成一下WebAPI文档功能,所以就动手了. 以为一天能搞完,结果,好几天过 ...

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

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

  4. Taurus.MVC 2.3.4 :WebAPI 文档集成测试功能升级:WebAPI批量自动化测试功能。

    前言: 最近升级了一下Taurus.MVC,现在最新版本是:Taurus.MVC 2.3.4,源码版本和nuget同步. 下面分三个步骤介绍下新版本的WebAPI批量自动化测试功能. 1.启用WebA ...

  5. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  6. Asp.Net WebApi+Microsoft.AspNet.WebApi.Core 启用CORS跨域访问

    WebApi中启用CORS跨域访问 1.安装 Nugget包Microsoft.AspNet.WebApi.Cors This package contains the components to e ...

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

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

  8. asp.net (webapi) core 2.1 跨域配置

    原文:asp.net (webapi) core 2.1 跨域配置 官方文档 ➡️ https://docs.microsoft.com/zh-cn/aspnet/core/security/cors ...

  9. Taurus.MVC 2.3.2 :WebAPI 文档集成测试功能及附加<%# JS执行功能语法 %>

    前言: 前些天有网友提到了那个界面丑陋的SwaggerUI,让我想起了多年前实现的WebAPI文档未完成的功能点,于是,动手了,便有了本文的内容. 开源地址:https://github.com/cy ...

随机推荐

  1. 用scikit-learn学习主成分分析(PCA)

    在主成分分析(PCA)原理总结中,我们对主成分分析(以下简称PCA)的原理做了总结,下面我们就总结下如何使用scikit-learn工具来进行PCA降维. 1. scikit-learn PCA类介绍 ...

  2. Tcp/ip 报文解析

    在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...

  3. 简单有效的kmp算法

    以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...

  4. linux应用调试技术之GDB和GDBServer

    1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...

  5. [systemtap手记]debian体系安装过程

    Debian体系,本人测试用机 Ubuntu 11.10 uname -r 查看原本的内核版本为 3.0.0-12-generic 第一步: 安装systemtap包 $ sudo apt-get i ...

  6. C#项目中文件的具体含义

    1.Bin 目录 用来存放编译的结果,bin是二进制binary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin ...

  7. Springboot搭建web项目

    最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...

  8. ABAP实现屏幕自己刷新和跳转功能

    ABAP开发工程中,有时候需要让跳转出的屏幕自动实现跳转和刷新的功能,该功能的实现需要在屏幕PBO 里面调用相应的事件执行. 关键代码为: SET TITLEBAR ' 屏幕自动程序'. IF g_c ...

  9. 安卓自定义组合控件--toolbar

    最近在学习安卓APP的开发,用到了toolbar这个控件, 最开始使用时include layout这种方法,不过感觉封装性不好,就又改成了自定义组合控件的方式. 使用的工具为android stud ...

  10. Atitit.研发管理软件公司的软资产列表指南

    Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...