Posts

Showing posts from 2017

[ASP.NET] 如何把檔案上傳到WEB API?

Image
研究背景:

最近協助朋友研究在公司網站建立新功能,讓客戶可以直接上傳檔案到公司的內部伺服器。

系統架構如下圖,檔案最後會放在公司內部的Web API Servr。而Web API接收上傳檔案的API是使用HTML的FormData格式


問題: 網路上大部分教學是利用jquery ajax把檔案直接上傳到Web API上,可是公司Web API是內部使用的伺服器,所以只能透過Web Server存取。解決方案: 以下是其中一種試過可行的做法。
Web Server部分Web API接收上傳檔案的API是使用HTML的FormData格式,所以當Web Server接收到Browser的上傳後需要把檔案轉成multipart/form-data的http Request,然後發送到後端的Web API去。產生的方法至少有兩種自己寫HTTP Request Message
post Upload上传文件中multipart/form-data 做的那些事
使用套件 RESTSharp
 Git
我們所使用的是REST Sharp。先讀取來自Browser的Request,然後把檔案變成multipart/form-data,再產生Http Request上傳到Web API。

namespace/*project name*/.Controllers { publicclass FilesController : Controller { // GET: Filespublicstring Upload() { List<string> filesList = new List<string>(); try { foreach(string file in Request.Files) { var fileContent = Request.Files[file]; if (fileContent != null & fileContent.ContentLength > 0) …

[雜] ThinkPad X200 上安裝Ubuntu版本經驗

Image
陪了我8年的ThinkPad X200自上一年開始使用Ubuntu 14.04 + SSD 加持後簡直是重振雄風,除了一些硬件問題 (螢幕變暗反應變慢,CPU不夠強不能看4K影片,沒有獨顯Scrolling不要太快) 外基本上還是順順的。聖誕節的時候手癢直接升級Ubuntu 16.04,結果問題就出來了...杯具。

我的ThinkPadX200規格:

CPU:Intel® Core™2 Duo Processor P8800記憶體:8GB硬碟:128GB SSD (品牌都忘了,反正是撿便宜)

在我這種老筆電跑Ubuntu16.04暫時發現了以下問題:

畫面太華麗: 16.04有很多Transparent的特效,每次秀出來都卡死了,就是用了 GNOME Tweak Tool and Unity Tweak Tool 把過場畫面關掉效果也不會回到14.04那種順暢感
GNOME Tweak Tool and Unity Tweak Tool 安裝方法CPU資源:P8800 速度本身不高,用Top查詢發現有些比較耗CPU的系統程序經常在跑,導致CPU溫度稍為高。我猜如果用在今天的筆電應該沒有太大問題,但是老筆電對於CPU就是斤斤計較。用Chrome異常慢:我也不知道是啥問題。 所以最後昨天我實在忍不下去了,還是重灌回14.04,再看看情況再上來報告。 暫時使用14.04是很順暢的,雖然畫面比較老舊。

01/03/2017更新:暫時來說沒有任何問題,而且連裡面的Win7 VM也順了很多
*不要問我身為堐踢狗為什麼不換筆電......

[ASP.NET MVC] 利用OAuth2為網站進行使用者認證的簡單實作

Image
前言:
公司最近打算使用由政府提供的市民登入平台,原因是利用這個平台登入的帳號具有等同自然人的法律效力,其他廠商不用老遠跑來公司簽約可以直接網路上搞定。政府使用的技術是OAuth2認證機制,所以小弟必需被逼研究熟悉整個流程再把公司的系統整合進去。

老實說,Oauth2一開始還真的看得我一頭霧水(霧煞煞),因為OAuth2跟傳統UserName Password的認證方式很不一樣,而且OAuth2在網站上及APP上的實現方法也不同,再加上網路上的圖文說明也很複雜。最後找到神人「鴨七」大大整理出三百多頁的PPT[1]及他在網站上的詳細介紹[2],來回看了幾次終於比較明白整套理論,以下說明是精簡版本,全部概念以網站架構為中心,未必完全適用於APP及Winform:

為什麼要OAuth2?
政府用的是OAuth2小弟又有什麼辦法呢我個人的看法是使用OAuth2的網站必須先向提供OAuth2的服務提供者進行登記,再加上對用戶的認證以後,就相當於有兩層的保護。再加上網站從頭到尾沒有碰過你的使用者帳號跟密碼,減少被盜取的可能,當然trust機制還是會有很多漏洞,例如User亂授權,不過已經是社交層面了。


OAuth2常用角色

Client: 通常是指你自己開發的系統。 Authorization Server: 處理認證、發出access Token的伺服器。Resource Server:保持資源的伺服器,在facebook的例子就是你的個人資料。Resource Owner: 就是人,或者User。 User Agent: 用戶代理,通常指的是Browser。OAuth2常用術語 Client ID and Client secret:
由於使用OAuth2的Client網站要先向Authorzation Endpoint(OAuth2提供者)進行登記,說明用途及Redirect URL,登記完之後Client ID就像OAuth2提供者發給你網站的身份證字號,通常為亂數, 而srcret就是公開金鑰。
Redirect URL:
由於當完成OAuth2程序後轉回Client網站的動作是由OAuth2提供者直接執行,以防止CSRF (Cross-site request forgery)攻擊。所以必須向Authorization Server登記URL。
AccessToken:
要讀取R…

[ASP.NET MVC] jquery 常見問題整理

Image
筆記動機: 
公司要開發一堆給客戶用的網路服務,由於IT部門預算很緊 那有一天不緊的,
一向負責寫RESTFUL後端商業流程的小弟終於還是要面對程序猿最害怕的使用者界面部分。
初步想法是把後端Restful API處理完的資料變成Json,再透過Viewbag把資料顯示在View上,所以最後變成以下塔配:

後端商業邏輯:Restful API網站: ASP.NET MVC、Newton.Json前端: jquery + json資料 由於小弟jquery是lv 1,所以一定要筆記一下不然很快會忘記
內容: 如何把data變成Json?
可以利用System.Web.Sript.Serialization的JavaSceiptSerializer() 或者Newtonsoft的JsonConvert.SerializaObject()
returnnewJavaScriptSerializer().Serialize(data);
View收到Json的ViewBag後怎樣可以讓jquery存取? 利用@Html.Raw(@ViewBag) 先將ViewBag轉回Json,例如我要把回傳回來的user profile轉回成JSONvar data = @Html.Raw(ViewBag.userprofile); 回傳回來的Json raw data 怎樣轉成人看的資料?
先在打算顯示資料的地方寫一個具有Id的 <div>,例如
<divid="appendUserProfile"></div> 然後在<script> 中加入.each迴圈把json每個item取出來
var data =@Html.Raw(ViewBag.userprofile); $(document).ready( function () { $.each(data, function (key, value) { $('#appendUserProfile').append('<tr><th>'+key+'</th><th>'+value+…