顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

2018/12/18

[筆記] ASP.NET WebApi2 繼承之後的 AttributeRouting 無法作用

在要提供 /api/MyApi 以及 /api/v2/MyApi 只有特定某個 action 需要 override 

或是產品提供基礎功能的 abstract class 提供給專案客製空間時可以使用到

太久之前處理過,這幾天開新案又碰到一次, MEMO 一下作法

2016/11/10

[C#] 使用 Obsolete 屬性來標記過時的方法或物件

專案跑久了總是會有一些功能改寫或補強,考慮向前相容時又怕同事新寫的 code 去用到即將拔掉的功能


2016/06/18

[筆記] 使用自訂的 Scaffold Templates 來加快 ASP.NET MVC 的開發

最近要開發的新系統終於準備好要開始投入大量人力開發了

由於多人開發上要要求每個人在某某功能的版面時要按照怎樣的結構來刻 HTML 有難度 

加上之前跟某位朋友聊天時提到他們家有使用 Scaffold Templates

故想說.... 與其一直宣導該怎樣寫,不如讓大家預設拿到的就是結構已經長好的頁面

2016/03/18

[筆記] ASP.Net MVC 使用 ActionFilter 驗證 ModelState

利用 MVC 的 Model binding 時都要檢查 ModelState 是否有正確

 if (!ModelState.IsValid) return new HttpStatusCodeResult(HttpStatusCode.BadRequest) 


但每個 Action 都要記得這樣檢查實在是太累了 (而且有些人會忘記....)

所以直接做成 Filter 讓每個 request 都會執行這樣~

     public class ModelStateValidationFilter : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            if (!filterContext.Controller.ViewData.ModelState.IsValid)
            {
                var errors = from errs in (
                        from modelstate in filterContext.Controller.ViewData.ModelState.Values
                        select modelstate.Errors
                    )
                    where errs.Count > 0
                    select errs[0].ErrorMessage;

                // 用 Elmah 記錄誰在哪邊沒通過驗證
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception(String.Join(",",errors.ToArray())));
                // 回應錯誤
                throw new HttpException(400);
            }

        }
    }


寫好之後要在 FilterConfig 中加入

    filters.Add(new ModelStateValidationFilter()); 

目前在寫的系統是用 Ajax From, 所以直接拋錯誤回去就可以 (讓 js 接手 on fail)

如果是重讀整個頁面的這樣就會直接讓 user 看到錯誤了~

2015/07/11

[筆記] HTML Agility Pack

最近心血來潮要爬某個地方的 html 來用, Google 了一下發現了 HTML Agility Pack 這個套件


2014/12/16

[筆記] Windows Store App 使用 SuspensionManager 無法儲存頁面狀態的問題

其實在開發 Store App 時如果新增的頁面是 BasicPage.xaml 以上的頁面,就會自動在方案下面開一個 common 目錄,並放一些預設的 Helper 來協助快速開發 App, 其中 SuspensionManager.cs 就是用來提供儲存狀態的 Helper Class



然後按照: Saving and Restoring State in a Windows 8 XAML App 提供的操作方式


1.在 App 的 OnLaunched 加入
 SuspensionManager.RegisterFrame(rootFrame, "AppFrame");

2.在 App 的 OnSuspending 加入
 await SuspensionManager.SaveAsync();
記得 OnSuspending  要 async 

3.在 App 中的 OnLaunched 判斷
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
 await SuspensionManager.RestoreAsync();
}


就可以實作出暫停/回復狀態的 App 了

2014/12/08

[筆記] Windows Store App 多國語系開發

之前無聊自己摸 Android App 時發現 Android App 的 resource 設定可以很快速的開發出多國語言版本,但寫  Windwos Store  App 時參考了兩三本書都沒有提到有關 string resource 的設定

Android 的 resource 除了 string resource 之外還有 layout, image 等等,而且在開啟專案時預設的範本就會有,只要添加新的語系目錄或是解析度目錄就可以了

微軟的預設範本只有 Assets目錄,沒有類似 android 下面的 res/values-{loc} 目錄

直到找到這篇  快速入門:使用字串資源 (XAML)

才知道原來微軟也有一樣的東西!!!!!


[筆記] Windows Store App 使用 Web Service 的權限問題

App capability declarations (Windows Runtime apps)


這問題困擾了好久,在我開發的電腦上存取 web service 時都不會有這個錯誤,但匯出安裝封裝給同事測試時大家都炸掉,炸掉的畫面如下




2014/08/25

[筆記] 如何把 log4net 的 log file 寫到執行檔下的目錄

以前寫 web 都不知道 XD  最近在寫 exe 才在想總不能指定 user 一定要去哪個位置撈 log

找了一下發現 file 這個 config 可以設定相對路徑 XD


2013/12/18

FileTracker : error FTK1011錯誤

不知道是電腦出了啥問題導致常常從公司的 svn 把 code 給 check 出來之後都會有這個問題

然後通常這個問題的專案 framework 版本都是 .Net 3.5

把專案升級到 .Net 4.0 之後重開就正常了

有 Google 到可以用新增環境變數 TRACKFILEACCESS = false 的作法,等哪天不能隨便更動 framework 版本的時候再來試試看好了

--

memo 一下,上次找好久,今天又碰到

2013/12/06

[筆記] 動態指定 XML Web Service 來源

這幾天幫公司專案重寫登入驗證的問題,由於客戶是使用 SSO 搭配多主機的方式,所以在總公司的 AP 上開 Web Service 讓各點的 AP 主機可以連回總公司做登入驗證


2013/11/19

[筆記] ASP.NET MVC 將 Model 獨立成一個專案 (使用EntityFramework)

會想這樣嘗試只是想試試看到底能不能切開,真的要切開應該是搭配 ASP.NET MVC API專案才是

切出來變成類別庫專案只是讓 model 變成一顆 dll,讓東西發佈出去之後別人看不到 DAL 層的運作方式.... 吧 (我知道有反組譯工具~)

環境是 Windows 8.1, Visual Studio 2012 , .NetFramework 4.5


2013/10/21

[練習] ASP.NET MVC 4 作業


20131021 Model的用法....

原本以為Model都要乖乖的跟EFs一樣一次只能繫結一個結構物件(列舉?),然後View裡面乖乖用IEnumerable吃下來
 後來經大悠大大開示才知道可以一次傳回一整個大物件,然後裡面包含 a, b, list a, list b, list c......
腦筋太死 0rz


然後上週五同事問到怎麼再回到之前的頁面之後把值keep住,
悠大大表示直接把所有的值給post到目標comtroller 如果查詢 fail 掉就呼叫原本的 View 把東西還給它即可 ~





2013/10/11

[練習] ASP.NET MVC 4

20131011 - XmlParser

上班無聊 (誤) 
來做個Xml資料來源的model試試看~ 
可惜似乎沒辦法像 EntityFramework 一樣直接在Razor page 一開頭做資料繫結 
 但用ViewData丟也是可以的啦,只是跑foreach時要轉型非常幽默 
@foreach (var a in (IEnumerable < Mvc4.Model.bParser.item > )ViewData["post"]) 


2013/06/26

LINQ to Everything

為了改某個功能 不小心就學會了用 LinQ 查目錄跟讀 XML 的方法

又為了 上次 file server 死掉要比實體檔案跟 SQL 的紀錄

又用上 查目錄 拿來 Join LinQ to SQL

實際寫起來的結果似乎是只要能讓他變成 List 就能用 LinQ 操作了

豪方便啊~


2013/06/19

VB and C# 跑批次檔 or 執行檔

VB

Dim Shell As Object
Shell = CreateObject("WScript.Shell")
Shell.Run("xxx.exe")



C#

System.Diagnostics.Process.Start("xxx.exe");

C#要很刁鑽的用VB跑也是可以 XD

dynamic ws = Microsoft.VisualBasic.Interaction.CreateObject("WScript.Shell");
ws.Run("Notepad.exe");


以上方法 webfrom winform 皆適用



2013/06/18

C# (Winform) 目錄無法跨磁碟機搬移的解法

C#的 System.IO.Directory.Move(Source,Target)

在搬移目錄時有不能跨磁碟區搬移的問題 但是 File.Move & File.Copy 則不會


ASP.NET 中 C# VB 於同一專案 App_Code 目錄內並存

兩者在一般的並存上其實不會有問題

但如果在 App_Code 內要同時存在時就會噴錯給你看