天天看点

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity<T>()方法总结:

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

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

3:jsonhelper的增强。

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

<a href="https://github.com/cyq1162/taurus.mvc">https://github.com/cyq1162/taurus.mvc</a>

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

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

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

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:
Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

如上代码:

1

2

3

4

5

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

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

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

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

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:
Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

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

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

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

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

如果把跨域关闭:

结果是:

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

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

发现有用户在使用taurus.mvc时,思维还在停留asp.net webapi。

比如请求:

<code>http:</code><code>//localhost:13508/api/default?id=1</code>

对方法定义的方法是:

<code>public</code>  <code>void</code> <code>default(</code><code>int</code> <code>id)</code>

<code>{</code>

<code>          </code> 

<code>}</code>

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

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

针对:a=1&amp;b=2这种get或post的参数,用query&lt;t&gt;("字段")拿。

<code>public</code> <code>override</code> <code>void</code> <code>default()</code>

<code>   </code><code>int</code> <code>id = query&lt;</code><code>int</code><code>&gt;(</code><code>"id"</code><code>);</code>

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

<code>   </code><code>string</code> <code>para3 = para;</code>

<code>}</code>

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

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

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

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

执行输出的结果:

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

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

发起请求:

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

请求结果:

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

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

Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:
Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)背景:开源地址:1:跨域请求2:常规请求参数的获取3:增强型的参数获取:GetJson方法4:增强型的GetEntity&lt;T&gt;()方法总结:

演示为get、post的结果一致,不另截图!

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

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

<code>list&lt;ab&gt; list = jsonhelper.tolist&lt;ab&gt;(getjson());</code>

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

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

taurus.mvc,在处理为webapi方面,仍遵行着简单实用高效的原则。

欢迎加入金牛的行列!

本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/p/6144736.html