【问题标题】:Hiding MVC pages in production在生产中隐藏 MVC 页面
【发布时间】:2012-03-01 02:40:13
【问题描述】:

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

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

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

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

        return View();
    }
}

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

我可以解决这个问题吗?有没有更好的办法?

【问题讨论】:

  • 我可能会为此使用自定义操作过滤器。这样您就不必将调试逻辑与控制器逻辑集成。
  • 最佳评论/句柄组合。 EVAR。
  • @Yuck 这真是个好主意,如果你把它写成正确的答案,我会给你分数的。
  • @fearofawhackplanet 路过评论,暂时没时间写。很高兴能启发你——祝你好运!

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


【解决方案1】:

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

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

【讨论】:

  • 这是要走的路。您还可以将功能从 Web 应用程序中的 HTTP 上下文(例如,Context.IsDebuggingEnabled)中分离出来,但最好将 web.config 用于此类事情。
  • 缺点是访问被拒绝,而不是未找到。
【解决方案2】:

出于好奇,您知道“Authorize”属性吗?

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

【讨论】:

  • forms loginUrl 不是问题,它不会阻止直接通过 URL 访问页面。 DEBUG 可以在 Debugger.IsAttached 没有的地方工作(无论出于何种原因,我不太明白)。我把它放在 Yuck 建议的过滤器中,这是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2018-04-23
  • 1970-01-01
相关资源
最近更新 更多