我在部署之前的最后阶段使用ASP.NET MVC获得了一个Web API。我创建了2个链接到_Layout.cshtml的页面,例如:
@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)
这两个添加的页面用于开发以编辑实体DB。我不希望在已部署的版本中访问这些页面以供任何人使用。
我通过注释掉上面显示的相应行,将这两页与主菜单中的帮助文档一起隐藏起来。但是,直接链接到页面仍然有效。是否有任何简单的方法可以关闭这些页面,或者如果有人试图访问它们而返回错误的请求,而不完全删除代码?它们在以后的某些时候肯定会很有用,我只想更简单地隐藏链接,暂时启用/禁用它们。
答案 0 :(得分:1)
您可以使用compiler directives来实现此目的。
如果您在Release
模式下编译代码,则只需使用不应按此部署的环绕代码:
#if DEBUG
//Code which shouldn't be deployed
#endif
如果您需要在Razor视图中,请尝试there中的大多数投票答案。
答案 1 :(得分:1)
取决于您的应用
如果,网络Api帮助位于Activty
,只有 Area
你的应用,你可以"禁用" Area
(结合之前的指令回答)
在AreaRegistration
或global.asax
/App_Start/RouteConfig.cs
您可能必须优雅地处理错误(//Only register all app Areas in DEBUG
#if DEBUG
AreaRegistration.RegisterAllAreas();
#endif
)
否则,您还可以根据需要创建http 500
并将其应用于(Filter
)控制器。这样,您可以有选择地将其应用于任何控制器(而不必禁用区域注册)。
这是一个简单的例子,因此必要时进行改进/调整:
过滤器:
Area
使用上述过滤器装饰Controller(如果/不再需要则删除):
using System.Net;
using System.Web.Mvc;
public class PrivatizeFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//This trivial example redirects to home page/root of app
filterContext.HttpContext.Response.Headers.Add("Location", "/");
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Moved);
}
}
H个