瀏覽標籤:

教學

[Windows] 開機時自動啟用數字鍵

不知為何Win10開機預設都沒有啟用數字鍵,變成每次開機都要先按一下NumLock感覺有點麻煩,今天終於受不了找了兩個方法解決。

方法如下:

  • 修改註冊檔
    1. Win+R輸入regedit開啟登陸編輯器
    2. 找到\HKEY_USERS\.DEFAULT\Control Panel\Keyboard
    3. InitialKeyboardIndicators修改為80000002
    4. 重開機即可。
  • 重新開機後再登入畫面先開啟NumLock,不登入直接在重開機一次即可。

來源:

  1. 技巧|Windows 10筆電開機時自動啟用數字鍵
  2. NB win10如何使開機後於登入輸入密碼前num lock on
       

[IIS] Windows Server 2016 無法安裝 URL Rewrite !?

今天興致來在VM上灌了2016打算把Wordpress移植過去的時候發現,無法安裝URL Rewrite !!!!
我明明就已經7.0以上了阿,我書讀得少不要唬爛我啊 !!!
2016-12-16-20_01_04-winserver_2016-vmware-workstation

 

餵狗了一下才發現,原來不只我有這個問題,解法如下:

  1. Win+R輸入下方指令打開註冊檔
    regedit
  2. 找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\MajorVersion
  3. 將數值修改為 7 再進行安裝!!
    2016-12-16-20_02_19-winserver_2016-vmware-workstation
  4. 就可以順利安裝囉 !!
    2016-12-16-20_02_44-winserver_2016-vmware-workstation
  5. 安裝完記得改回去嘿,避免發生不必要的錯誤 !!

 

 

來源:https://forums.iis.net/t/1225087.aspx

       

[轉載] 系統架構設計

來源:[鐵人30天]當ASP.NET MVC 遇見 Angular.js MVC 客戶管理系統(3) – 系統架構設計

* 為何要分層架構規劃

分層的重要性,也是寫程式幾年後才真的領悟,ASP時代那種義大利麵式的寫法(html、Script、後端程式、SQL程式全混再一起),接著WebForm CodeBind將前後端拆後,再到現在慣用的MVC,深深覺得”關注點分離”這的確是一件很重要的事,目前開發習慣,即使專案在小,也會整理出自己的三層架構起手式,如果是更大型專案,就會再更細分。

架構圖:

_thumb3

各分層介紹:

  • DAL(Data Access Layer) : 有關SQL語法、EntityFream資料庫溝通,都會在此層。
  • BLL(Business Login Layer):資料流從DB或從User輸入後,一定會有一些邏輯判斷,該商業邏輯流程都會寫在此層
  • UI(User Interface):有關Web專案、Web API(Web Service)、Apps 都會在此層
  • Domain Entity : 裡面會有定義ViewModel Class,用來貫穿三個分層
  • Resources:用來放一些資源檔 … e.g 多國語系檔
  • Utility : 用來放置一些共用函示庫 … 如加解密

整個專案建立完如下圖:

1_thumb4

       

[應用] SSD 4K對齊

在Windows安裝前,先按下Shift+F10進入Command模式,並輸入diskpart即可開始進行分割磁區!

 

  1. 列出硬碟清單,找出要操作的編號
    list disk
  2. 選擇硬碟
    select disk 0
  3. 清除硬碟
    clean
  4. 初始化磁區
    create partition primary align=1024
  5. 列出磁區,找出要操作的編號
    list partition
  6. 選擇磁區
    select partition 1
  7. 啟用磁區
    active
  8. 格式化
    format fs=ntfs unit=4096 quick
  9. 完成!

 

 

       

[C#][ASP.NET WebAPI] 如何讓 WebAPI 支援 Session ?

WebAPI原本無法使用HttpContext.Current.Session["aaa"]這樣的方法來使用Session,幸好有找到解決方法可以用。

 

在檔案:~/Global.asax,內新增以下程式碼即可支援

protected void Application_PostAuthorizeRequest()
{
	System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
}

 

參考:

 

       

[C#][ASP.NET WebAPI] 修改預設回傳格式為Json

最近在玩ASP.NET Web API,他不但支援Json也支援Xml,但預設回傳的格式是Xml怎麼辦?

 

檔案位置:~/App_Start/WebApiConfig.cs

//預設回傳Json
MediaTypeHeaderValue appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

 

參考:

       

[MSSQL] 當自動識別欄位需要Insert資料時應該怎麼辦 ?

今天在手動將MySQL資料匯入MSSQL時遇到了這個問題,但又不想將自動識別欄位取消掉,於是乎找了一下資料來解決 …

 

語法:

SET IDENTITY_INSERT TABLE_NAME OFF;
SET IDENTITY_INSERT TABLE_NAME ON;

 

範例:

SET IDENTITY_INSERT [dbo].[Demo] ON;

INSERT INTO [dbo].[Demo] ([ID], [Name]) VALUES (N'1', N'王小名');

INSERT INTO [dbo].[Demo] ([ID], [Name]) VALUES (N'2', N'王大名');

SET IDENTITY_INSERT [dbo].[Demo] OFF;

 

 

參考:

  1. 在程式開發時使用SET IDENTITY_INSERT似乎無效?
  2. SQL錯誤訊息:當IDENTITY_INSERT 設為OFF 時,無法將外顯
       

[C#] 利用 interface(介面) abstract(抽象) override(覆寫) inherit(繼承) 實作簡單範例

來源:

  1. (原創) interface和abstract class有何不同? (C/C++) (.NET) (C#)
  2. [C#] abstract 和 virtual 函數的差異

 

這篇真的寫得很棒,大家一定要點進去看看,並自己動手寫Code !!
而我自己寫一篇只是為了建檔,方便日後自己觀看用,裡面的Code都是基於上面教學文寫的,自己只是加了一個AutoDoor的功能而已。

 


 

  1. 建立一個abstract的Door類別,裡面有Open(開門)與Close(關門)這兩個虛擬方法可以用
    abstract class Door
    {
        public virtual void Open()
        {
            Console.WriteLine("Open Door");
        }
        public virtual void Close()
        {
            Console.WriteLine("Close Door");
        }
    }
    

     

  2. 建立一個HorizontalDoor類別,它繼承了原先的Door,所以它也有Open與Close這兩個方法可以用
    class HorizontalDoor : Door { }
    

     

  3. 建立一個VerticalDoor類別,它也繼承了Door,可是我在裡面override了原先的Open與Close,另外實作其方法
    class VerticalDoor : Door
    {
        public override void Open()
        {
            Console.WriteLine("Open vertically");
        }
        public override void Close()
        {
            Console.WriteLine("Close vertically");
        }
    }
    

     

  4. 建立一個IAlarm介面,裡面定義了Alert這個方法
    interface IAlarm
    {
        void Alert();
    }
    

     

  5. 建立一個Alarm類別,它繼承了IAlarm,並在裡面實作Alert
    class Alarm : IAlarm
    {
        public void Alert()
        {
            Console.WriteLine("Ring ~~");
        }
    }
    

     

  6. 建立一個AlarmDoor類別,它繼承了Door,同時在裡面使用了Alarm類別的Alert方法
    class AlarmDoor : Door
    {
        private IAlarm _alarm;
    
        public AlarmDoor()
        {
            _alarm = new Alarm();
        }
    
        public void Alert()
        {
            _alarm.Alert();
        }
    }
    

     

  7. 建立一個AutoAlarmDoor類別,它繼承了AlarmDoor,並覆寫了原本的Open方法,裡面呼叫base.Open方法並接著呼叫Alert方法
    class AutoAlarmDoor : AlarmDoor
    {
        public override void Open()
        {
            base.Open();
            Alert();
        }
    }
    

     

  8. 建立一個DoorController類別,這個類別是用來控制管理所有的Door
    class DoorController
    {
        protected List<Door> _dootList = new List<Door>();
    
        public void AddDoor(Door Door)
        {
            _dootList.Add(Door);
        }
    
        public void OpenDoor()
        {
            foreach (var item in _dootList)
            {
                item.Open();
            }
        }
    }
    

     

  9. 完成 !!
    static void Main(string[] args)
    {
        DoorController dc = new DoorController();
        dc.AddDoor(new HorizontalDoor());
        dc.AddDoor(new VerticalDoor());
        dc.AddDoor(new AlarmDoor());
        dc.AddDoor(new AutoAlarmDoor());
    
        dc.OpenDoor();
    
        Console.ReadLine();
    }

     

  10. 執行結果
    2016-09-07 23_06_31-file____C__Users_Minsheng_Desktop_ConsoleApplication_Door_ConsoleApplication_Doo

 

  • 注意事項
    1. abstract method 不會有程式內容
    2. abstract method 繼承後,一定要 override
    3. virtual method 一定要有程式內容
    4. 宣告為 virtual 的 method,繼承後才可以進行 override
    5. 設定為 virtual 的 method,沒有一定要 override

 

       

[C#] 複製 Model 後異動時會互相引響

有一需求必須複製一個Model,這時如果異動Model_Copy時會造成Model_Source也跟著被更動,爬文後找到了一些方法來測試,問題依然存在…

 

  1. 用等於(=)的方式取值
    • 程式碼
      2016-08-25 22_03_12-ConsoleApplication1 - Microsoft Visual Studio
    • 結果:
      2016-08-25 22_03_39-file____C__Users_Minsheng_Desktop_ConsoleApplication1_ConsoleApplication1_bin_De
  2. 用new建立新的物件的方式取值
    • 程式碼
      2016-08-25 22_06_46-ConsoleApplication1 [執行] - Microsoft Visual Studio
    • 結果
      2016-08-25 22_03_39-file____C__Users_Minsheng_Desktop_ConsoleApplication1_ConsoleApplication1_bin_De
  3. 利用LINQ的方式取值
    • 程式碼
      2016-08-25 22_08_09-ConsoleApplication1 [執行] - Microsoft Visual Studio
    • 結果
      2016-08-25 22_03_39-file____C__Users_Minsheng_Desktop_ConsoleApplication1_ConsoleApplication1_bin_De

 

最後終於找到了一個方法可以用,那就是讓Model繼承ICloneable並使用Object中的MemberwiseClone()來實作Clone(),就可以順利Copy啦!

  • 程式碼
    1. Model
      2016-08-25 22_11_30-ConsoleApplication1 [執行] - Microsoft Visual Studio
    2. 利用LINQ來呼叫Clone()方法
      2016-08-25 22_46_21-ConsoleApplication1 - Microsoft Visual Studio
  • 結果
    2016-08-25 22_15_03-file____C__Users_Minsheng_Desktop_ConsoleApplication1_ConsoleApplication1_bin_De