1:有使用者回報了關于跨域請求的問題。
2:有使用者回報了參數擷取的問題。
3:jsonhelper的增強。
在綜合上面的條件下,有了2.2版本的更新,也是以寫了此文。
<a href="https://github.com/cyq1162/taurus.mvc">https://github.com/cyq1162/taurus.mvc</a>
下面對增強的功能進行介紹:
除了正常的的jsonp跨域,html5開始支援增強跨域,則變得更為友善,隻需要服務端請求頭輸出:
如上代碼:
1
2
3
4
5
<code>1:可以通過檢測來源的主機和請求的主機不一緻判斷是否跨域,如果是,則傳回允許跨域辨別。</code>
<code>2:第一個*表示允許任意請求,當然你也可以指定多個“http://a.com,http://b.com”.</code>
<code>3:第二個true表示允許跨域操作cookie,反之,則一行都不要出現,而不是設定為false。</code>
另外,網上有文章介紹說,跨域時,浏覽器會發出一個options的預請求,于是架構也做出了處理:
狀态碼204,比起200的好處,是不需要傳回conent内容,隻傳回請求頭。
在demo的時候,測試了一下get請求,沒發現浏覽器發出預請求,可能場景或環境不同。
在控制台(aries.cyqdata.com)發起一個跨域請求(http://localhost:13508/home/index):
如果把跨域關閉:
結果是:
于是:架構預設是支援跨域請求的,如果不想支援,可以關閉!
發現有使用者在使用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&b=2這種get或post的參數,用query<t>("字段")拿。
<code>public</code> <code>override</code> <code>void</code> <code>default()</code>
<code> </code><code>int</code> <code>id = query<</code><code>int</code><code>>(</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>
直接就是一串json:({a:"1","b":"2"})過來,這時候,正常的方法是拿不到資料。
原生的可以通過httpinputstream流拿到,但架構進行了人性化的封裝:
通過getjson()方法,可以擷取:
執行輸出的結果:
該方法不僅可以拿到直接post的json,還可以将a=1&b=2這種方式直接轉json傳回,如:
發起請求:
請求結果:
對于post請求處理結果一緻,就不重複截圖了!
示範為get、post的結果一緻,不另截圖!
你可以post複雜的json:{a:{b:2,c:3},f:['1','2']}之類的,隻要實體對應上,即可轉換,不另外截圖。
暫未提供:對于post的[{},{}]的json數組轉換,可以用:
<code>list<ab> list = jsonhelper.tolist<ab>(getjson());</code>
以上為擷取參數轉json的相關方法,非常實用!!!
對于輸出json,用write方法,可将複雜對象轉換成json。
taurus.mvc,在處理為webapi方面,仍遵行着簡單實用高效的原則。
歡迎加入金牛的行列!
本文原創發表于部落格園,作者為路過秋天,原文連結:http://www.cnblogs.com/cyq1162/p/6144736.html