在生产中隐藏MVC页面

时间:2012-02-08 16:11:36

标签: c# .net asp.net-mvc production-environment conditional-statements

我有一个新的MVC应用程序,它集成到一个更大的预先存在的Intranet站点中。

在生产环境中,身份验证详细信息将从现有Intranet站点传递。但在开发中,我需要一个本地表单登录控件来创建身份验证。

这意味着我需要一种方法来在将解决方案部署到生产服务器时隐藏任何本地登录页面。我试图使用Debugger.IsAttached重定向远离任何登录页面

public class AccountController : Controller
{
    public ActionResult LogOn()
    {
        if (!System.Diagnostics.Debugger.IsAttached)
            RedirectToAction("NotFound");

        return View();
    }
}

事实证明这不起作用。由于某些原因,这对我来说是一个谜,导航到/Account/LogOn时仍然会提供登录页面。

我能解决这个问题吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

如果生产和开发都有单独的Web.config,则可以在生产环境的Web.config中限制对此操作的访问:

<configuration>
   <location path="/Account/LogOn">
      <system.web>
         <authorization>
            <deny users="?"/>
         </authorization>
      </system.web>
   </location>
</configuration>

答案 1 :(得分:2)

出于好奇,您是否了解“授权”属性?

http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

您提到您的应用程序是我认为处理安全性(身份验证)的大型应用程序的一部分,对吗?

如果是这样,在开发过程中,您可以根据需要使用不同的/特定的web.config。

<authentication mode="Forms">  
  <forms loginUrl="~/MyDevelopment/LogIn"/> //Just for dev
</authentication>  

此外,

我建议你使用编译器的指令

而不是Debugger.IsAttached
#if !DEBUG
    RedirectToAction("NotFound");
#endif