WebAPI隐藏默认首页

版权声明:本文为博主原创文章,不需博主允许即可随意转载。 https://blog.csdn.net/a_dev/article/details/89000926

需求背景

某项目需要通过WebAPI提供GIS接口服务。开发完成,部署到客户机后,客户又提出,不希望人们能够通过IP+端口号的方式直接访问到接口服务网站,以免直接在接口页面进行测试或操作,导致数据安全方面的问题。

比如,接口部署好后,通过浏览器中输入IP和端口,可以访问到接口服务网站:

并可以进一步访问接口信息:

而客户希望看到的效果是,无论直接输入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想查看接口页面时,也自动跳转,原因在于二者使用相同的布局文件。效果如下:

与此同时,接口的调用是不受影响的:

思维扩展

  1. 如果要跳转到其他指定页面,只需修改跳转页面的实际地址即可,比如可以跳转到百度搜索、hao123导航、客户单位官网等
  2. 该更新只新增一个html文件及修改少量代码,重新修改后,不需全部重新部署,而只要更新相应的修改文件即可,非常方便
  3. 如果需要看到接口地址和进行接口测试,只需要使用双斜杠屏蔽跳转的那一行C#代码即可,当然,也可删除跳转代码

猜你喜欢

转载自blog.csdn.net/a_dev/article/details/89000926