从ASP.NET Web API

时间:2017-01-09 18:06:49

标签: c# asp.net asp.net-mvc

我在部署之前的最后阶段使用ASP.NET MVC获得了一个Web API。我创建了2个链接到_Layout.cshtml的页面,例如:

@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)

这两个添加的页面用于开发以编辑实体DB。我不希望在已部署的版本中访问这些页面以供任何人使用。

我通过注释掉上面显示的相应行,将这两页与主菜单中的帮助文档一起隐藏起来。但是,直接链接到页面仍然有效。是否有任何简单的方法可以关闭这些页面,或者如果有人试图访问它们而返回错误的请求,而不完全删除代码?它们在以后的某些时候肯定会很有用,我只想更简单地隐藏链接,暂时启用/禁用它们。

2 个答案:

答案 0 :(得分:1)

您可以使用compiler directives来实现此目的。 如果您在Release模式下编译代码,则只需使用不应按此部署的环绕代码:

#if DEBUG  
    //Code which shouldn't be deployed  
#endif 

如果您需要在Razor视图中,请尝试there中的大多数投票答案。

答案 1 :(得分:1)

取决于您的应用

  • 如果,网络Api帮助位于Activty 只有 Area你的应用,你可以"禁用" Area(结合之前的指令回答)

    AreaRegistrationglobal.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个