2019年4月22日 星期一

Web API 發佈與 HTTP Error 500.19 問題處理

Local 測試完畢後,接下來就要發佈到 Server 上。
專按按右鍵,選擇 Publish,選擇其中的 IIS, FTP, etc


2019年4月21日 星期日

修改 WebAPI Http Request Method

實務上,除了一次取得全部資料,通常也會依照條件來選取單筆資料。

ASP.Net WebAPI 預設的 Method 如下,帶入的參數為 id,
執行後網址後面輸入 /api/{control_name}/{id},但是跑了會錯,因為:

  • MODEL 內並沒有欄位名稱為 id
  • MODEL 使用多個欄位條件,單一欄位不足篩選。



2019年4月20日 星期六

透過 Model 建立對應的 Controller,並測試 WebAPI

MVC 專案中,已經有一個 Controllers 資料夾。
在上面案右鍵,依序選擇 Add > Controller...


2019年4月19日 星期五

WebAPI 專案內加入 Entity Framework 6 Data Model

完成基本 WebAPI 專案後,接著就是要加入 MODEL。

MODEL 可以想像成「資料集合」,資料表、VIEW 等都可算是。

MVC 架構已經預設好一個資料夾叫 Models,我們直接將 MODEL放在裡面。
MODEL 可以是任何一個物件類別,這邊則使用 Entity Fremawork 來建立。

在資夾上按右鍵,依序選擇 Add > New Item...


2019年4月18日 星期四

Visual Studio 2017 快速建立 WebAPI 專案

以下示範如何於 Visual Studio 2017 建立一個 WebAPI 專案,並以 JSON 格式回傳資料。

首先,建立一個新專案,選擇「ASP.NET Web Application (.Net Framework)」,並確認參數正確。

2018年11月26日 星期一

簡單筆記

TryParse

decimal d = 0;
string s = "123.456";

if (decimal.TryParse(s, out d))
    MessageBox.Show(d.ToString("N1"));
else
    MessageBox.Show(s);

Excel 的 MROUND

/// <summary>
/// MROUND 函數為:傳回四捨五入為所需倍數的數字。EX.MROUND(7,5)=>5  MROUND(8,5)=>10
/// </summary>
/// <param name="number">原始數值</param>
/// <param name="multiple">倍數因子 (計算0.5的倍數就傳0.5)</param>
/// <returns>計算後的結果,效果等同 Excel MROUND 公式</returns>
public static decimal GetMROUND(decimal number, double multiple)
{
    return Math.Round(number / (decimal)multiple, MidpointRounding.AwayFromZero) * (decimal)multiple;
}

2018年9月12日 星期三

.Net 非同步處理

初次接觸 Windows Form 程式設計時,因為基本觀念不清楚,常常會鬧笑話,以下就是一個常見的例子:
為了避免某段程序執行時無回應,想用另一個 Thread 來處理並回寫資料。(通常是寫入某個元件,例如 Label 或 TextBox,同理讀取資料也是)

看似簡單,但因為 Windows Form 的 UI Thread 是分開的,往往不是只看到最後結果,就是在不同 Thread 內呼叫彼此 UI 元件跳出異常 (跨 Thread 存取 UI 元件是不允許的)。找了一些資料看,程度太差,也是一直半解 Task、Backgroudworker、BeginInvoke、Delegate...

直到發現這篇,寫得非常好:
https://dotblogs.com.tw/johnny/2014/04/02/144594

其中有一段寫到
... 因為上面那三行程式都在同一個 UI thread 上面, 而 Windows Form 會在 UI thread 上的指令執行完畢並且返回之後, 才會觸發它的 Paint 事件。同樣的程式, 如果 ... 在 Console 程式中這個問題就不會發生, 因為 Console 程式沒有像 Windows Form 那種 Paint 事件。

上面的連結寫得很詳細,不再贅述,簡單紀錄一下自己的用法如下:

private async void btnTest_Click(object sender, EventArgs e)
{
    //
    // do something...
    //

    await doSomethingAsync();
}

private async Task doSomethingAsync()
{
    //
    // do something...
    //

    await Task.Delay(1000); // 暫停一下,看效果用
}