赞
踩
某项目需要通过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想查看接口页面时,也自动跳转,原因在于二者使用相同的布局文件。效果如下:
与此同时,接口的调用是不受影响的:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。