ASP.NET MVC 建立 WebAPI 的筆記 (使用台鐵公開資料)

January 10, 2021

這篇文章描述在使用台鐵公開資料建立 Web API 時,所遇到的問題與解決方式。使用技術為 ASP.NET MVC、SQL 與 Entity Framework。

加入 WebAPI 至原有的 ASP.NET MVC 專案

以下節錄參考資料的內容並稍作修改。

  1. 更新 ASP.NET MVC 至最新版本。
  2. 安裝 ASP.NET Web API 相關套件
Install-Package Microsoft.AspNet.WebApi
Install-Package Microsoft.AspNet.WebApi.Client.zh-Hant
Install-Package Microsoft.AspNet.WebApi.Core.zh-Hant
Install-Package Microsoft.AspNet.WebApi.WebHost.zh-Hant
  1. 新增 /App_Start/WebApiConfig.cs 檔案,並加入以下程式碼:
public static void Register(HttpConfiguration config)
{
    // Web API 設定和服務

    // Web API 路由
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

(可能須引用 System.Web.Http 命名空間)

  1. 修改 Global.asax.cs 檔案,註冊 ASP.NET Web API 設定:在 Global.asax.cs 檔案最上方引用 System.Web.Http 命名空間,並在 Application_Start() 方法中的 AreaRegistration.RegisterAllAreas(); 這行下方加入以下程式

GlobalConfiguration.Configure(WebApiConfig.Register);

參考資料

台鐵時刻表與資料來源

  • 取得特定時間、由起站開往終站的當日列車班表:可從參考資料取得今日預定 (非即時) 的台鐵列車時刻。可以在取回 JSON 資料以後進行剖析,檢查各列車的資料是否包含欲查詢的起點、終點站,並搭配停靠的順序取得結果。

參考資料

在 ASP.NET MVC 中取得文字方塊的輸入

  • 在 Model 中加入 Input Model、Controller 中加入 Post 方法。當使用者按下按鈕後,送出 POST 訊息至 Controller,再回傳 Input Model 結果至 View。

參考資料

執行期間內儲存設定

  • 為了紀錄是否已下載今日資料 (避免重新下載相同資料),使用 Web.Config 紀錄並儲存設定,範例如下:
<appSettings>
    <add key="TraDate" value="2020/12/01" />
</appSettings>

可以使用 System.Web.Configuration.WebConfigurationManager.AppSettings["TraDate"]; 來存取。

  • 一旦停止執行,再重新啟動,先前的設定值就會清空。

參考資料

以 JSON 格式輸出查詢結果

  • 如果要自訂輸出格式的話,可以透過 HttpResponseMessage,並透過在 Get() 語法或 WebApiConfig.cs 內設定 MediaTypeFormater 自訂輸出格式。語法如下:
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
    config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
  • 輸出時回傳 Request.CreateResponse(HttpStatusCode.OK, result) ,result 放入類別的物件或清單即可。

  • 類別本身和內部成員都要宣告成 public 才能被序列化成 JSON 格式!

參考資料