天天看點

WebAPI隐藏預設首頁需求背景架構研究功能實作思維擴充

需求背景

某項目需要通過WebAPI提供GIS接口服務。開發完成,部署到客戶機後,客戶又提出,不希望人們能夠通過IP+端口号的方式直接通路到接口服務網站,以免直接在接口頁面進行測試或操作,導緻資料安全方面的問題。

比如,接口部署好後,通過浏覽器中輸入IP和端口,可以通路到接口服務網站:

WebAPI隐藏預設首頁需求背景架構研究功能實作思維擴充

并可以進一步通路接口資訊:

WebAPI隐藏預設首頁需求背景架構研究功能實作思維擴充

而客戶希望看到的效果是,無論直接輸入IP加端口,還是進一步通路接口頁面,都能傳回一個空白頁面,或者至少不會看到現有頁面上的資訊,達到隐藏首頁的目的,而又不影響接口調用。

架構研究

WebAPI是基于MVC模型的一個架構,我們所能看到的,屬于View的部分。這部分的樣式頁面,通過WebAPI架構動态加載出來。如果要隐藏掉預設首頁,至少有兩個思路:一是直接修改頁面内容或禁止其加載,二是每當加載頁面時自動跳轉到空白頁面。為了友善接口測試和調用,我們拟采用後一種思路解決問題。

首頁和API頁采用了相同的頁面布局,我們發現,其布局檔案位于\Views\Shared\_Layout.cshtml檔案中。于是,思路很明确,在該頁面中加入自動跳轉到空白頁面的方法即可。

我們先在該項目中加入一個空白的靜态html頁面,命名為blank.html。在_Layout.cshtml中,可以直接寫C#代碼進行跳轉。

功能實作

原來的布局檔案部分代碼截取如下:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
           

可以看到,以@開頭的部分為C#代碼,可以直接執行。

我們在其中加入自動跳轉到空白頁面的代碼後,如下:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
        @{
        Response.Redirect("blank.html", false);
    }
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
           

同時,blank.html的body部分,我們加入一段文字,來進行測試。

編譯,執行,在浏覽器中鍵入IP加端口,發現已自動跳轉到blank頁面,添加/help想檢視接口頁面時,也自動跳轉,原因在于二者使用相同的布局檔案。效果如下:

WebAPI隐藏預設首頁需求背景架構研究功能實作思維擴充

與此同時,接口的調用是不受影響的:

WebAPI隐藏預設首頁需求背景架構研究功能實作思維擴充

思維擴充

  1. 如果要跳轉到其他指定頁面,隻需修改跳轉頁面的實際位址即可,比如可以跳轉到百度搜尋、hao123導航、客戶機關官網等
  2. 該更新隻新增一個html檔案及修改少量代碼,重新修改後,不需全部重新部署,而隻要更新相應的修改檔案即可,非常友善
  3. 如果需要看到接口位址和進行接口測試,隻需要使用雙斜杠屏蔽跳轉的那一行C#代碼即可,當然,也可删除跳轉代碼
WebAPI隐藏預設首頁需求背景架構研究功能實作思維擴充