iT邦幫忙

2

[C#][ASP.NET] Web API 開發心得 (1) - Web Form 搭配 Web API

前言

小弟目前公司還沒有導入 ASP.NET MVC,開發上還是使用 Web Form,不過已經沒有在用控制項,而是採用 SPA 的方式,透過 ASHX (泛型處理常式) 處理 angular 送到後端的資料,但體驗過 MVC 的各項優點後,例如: Router、Action Filter、等等,真的回不去了...,所以決定在新專案內導入 ASP.NET Web API,取代後端的 ASHX。

資料庫方面,因為團隊還是習慣直接處理 SQL,所以就不考慮使用 Entity Framework,因為我覺得 Entity Framework 對資料庫的侵入性太強,如果使用可能會帶給團隊很多麻煩,但習慣了 ORM 強型別的各種優點後,實在不想回去用 DataTable,所以去爬了很多文章,最後決定使用很多前輩都推薦的 Dapper 這個輕量級ORM。

在分層架構上,有嘗試分成 Service (商業邏輯層) 和 Repository (資料存取層),Repository 之間透過 Unit Of Work 來達成資料庫交易動作,各層之間都依賴 Interface,並使用 IOC 框架注入實體,不過最後的結果不盡理想,其原因是,小弟目前負責的專案都是小專案,所以其實分那麼多層有點累贅,有點為了架構而架構的感覺,加上各層都依賴 Interface 沒有接觸過分層架構的團隊會覺得程式跳來跳去的不好維護,且小弟沒有寫測試的習慣,所以 IOC 其實可有可無,測試也是小弟未來要努力的地方,經過團隊的反饋和自己一翻思考後,決定拿掉 Service、Interface 和 IOC,拿掉後也的確讓程式寫起來更順,也得到團隊的接受。

在經過這些嘗試後,對分層架構有了更深的認識,每個概念都有著它要解決的問題,並不是所有專案都需要三層架構、IOC、等等...,每個概念都可以配合專案遇到的問題或團隊的習慣,自由的組合,然後小弟接下來會分享一些開發心得,和一些常用的功能模組,如果有需要改進的地方,再麻煩各位大大指點。

加入 Web API

1. 新增空白網站
點選 Visual Studio 右上角,檔案 > 新增 > 網站或專案,這裡網站或專案都可以,
然後選擇 ASP.NET 空白網站,專案的資料夾分成內外兩層,內層放真正的網站,所以網站路徑選擇內層資料夾,外層資料夾則用來放.sln檔、git資料夾、doc文件檔、資料庫專案、測試專案,等等和主網站無關的東西。
https://ithelp.ithome.com.tw/upload/images/20180311/20106865fMpC4lXvJd.jpg

2. 儲存專案 .sln 檔
網站建立完成後,點選全部儲存,然後選擇外層資料夾儲存.sln專案檔。
https://ithelp.ithome.com.tw/upload/images/20180311/20106865x2i2lFi1pd.jpg

3. 將網站架設在 IIS 上
因為新增空白網站時,選擇的是網站,網站執行必需先架在IIS上,如果選擇專案就不用,可以直接用 Visual Studio 執行。
架設網站步驟,開啟 IIS 管理員,在 Default Web Site 上按右鍵選擇新增應用程式,接著選擇網站路徑。
https://ithelp.ithome.com.tw/upload/images/20180311/20106865GZQmPkFQeP.jpg

4. 加入組件參考
開啟 Nuget 加入下列組件:

  • Microsoft.AspNet.WebApi
  • Microsoft.AspNet.WebApi.Owin
  • Microsoft.Owin.Host.SystemWeb

5. 新增 App_Code 資料夾,並加入檔案 WebApiConfig.cs 和 Startup.cs
我們所有的.cs程式檔,都會放在 App_Code 資料夾內,
新增 App_Code 資料夾後,在裡面加入檔案 WebApiConfig.cs 和 Startup.cs,

WebApiConfig.cs 程式碼如下:

namespace Config
{
    public static class WebApiConfig
    {
        public static HttpConfiguration GetConfig()
        {
            var config = new HttpConfiguration();

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

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

Startup.cs 程式碼如下:

[assembly: OwinStartup(typeof(AppsCore.Startup))]

namespace AppsCore
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var config = WebApiConfig.GetConfig();
            app.UseWebApi(config);
        }
    }
}

6. 新增 Web API Controller
在 App_Code 資料夾內,新增 Api 資料夾,用來放 Web API 的 Controller,
接著在裡面加入 TestController,測試一下 Web API 有沒有成功執行。
https://ithelp.ithome.com.tw/upload/images/20180311/201068659OSxJPF8Hv.jpg

TestController 程式碼:

namespace Api
{
    [RoutePrefix("api/test")]
    public class TestController : ApiController
    {
        //測試API
        [HttpGet]
        [Route("live")]
        public bool Live()
        {
            return true;
        }
    }
}

測試:
在瀏覽器輸入 api 網址後,正確的顯示 api 的回傳值 true。
https://ithelp.ithome.com.tw/upload/images/20180311/20106865Ii8t3OUut8.jpg

結語

這篇到這裡已經成功在 Web Form 專案上加入 Web API,下一篇會繼續介紹 Web API 的各種功能和用法,感謝大家觀看。


1 則留言

0
神Q超人
iT邦新手 4 級 ‧ 2018-03-11 22:35:24

webAPI可以直接取代掉ashx哦/images/emoticon/emoticon19.gif

哈哈哈,可以啊,
現在我盡量不用 ashx,
Web API 的功能比 ashx 更完整強大,
且可以和 Web Form 共存,
由此慢慢轉 MVC 是不錯的選擇。
/images/emoticon/emoticon39.gif

哇真假,那我應該也要來學個幾招,哈哈/images/emoticon/emoticon74.gif

我要留言

立即登入留言