【问题标题】:ASP.NET MVC action and virtual directory with same pathASP.NET MVC 操作和具有相同路径的虚拟目录
【发布时间】:2010-11-30 19:53:35
【问题描述】:

当控制器操作使用与虚拟目录相同的 URL 时,是否需要任何特殊的路由或 IIS 配置?

我有一个 ASP.NET MVC 1.0 应用程序,它需要将 Windows 身份验证应用于单个操作(“/Login/FromWindows”)。为此,我们设置了一个与操作路径相同的虚拟目录(例如“/Login/FromWindows”),并在 IIS 中对其启用了 Windows 身份验证。

当我访问 /Login/FromWindows URL 时,我得到一个空的 HTTP 200 响应,并且服务器文本日志中没有记录任何内容。 “FromWindows”操作应该记录消息并将用户重定向到主页。

似乎操作代码根本没有被执行,因此可能与虚拟目录发生冲突。

Global.asax.cs 中的路由配置

public static void RegisterRoutes(RouteCollection routes)
{
    // snipped: ignored routes for images, scripts, etc.

    routes.MapRoute( "Default", "{controller}/{action}",
        new { controller = "Home", action = "Index" } );
}

【问题讨论】:

    标签: asp.net-mvc iis-7 virtual-directory


    【解决方案1】:

    你是对的,操作代码没有被执行。这是因为现有文件路径(无论是否虚拟)优先于 MVC 路由规则。

    为什么要使用虚拟目录?只需在 web.config 中将身份验证设置为 windows,并在相应的操作方法上使用 [authorize] 属性。

    Web.config:

    <configuration>
         <system.web>
              <authentication mode=”Windows” />
         </system.web>
    </configuration>
    

    动作方法:

    [Authorize]
    public ActionResult SomeAction()
    {
         return View();
    }
    

    访问http://www.asp.net/mvc/tutorials/authenticating-users-with-windows-authentication-vb 了解有关使用 Windows 身份验证的 mvc 的更多信息。

    【讨论】:

    • 我们希望使用虚拟目录来阻止对该 URL 的外部请求。只有域中的内部 Windows 用户才能使用此页面,我们不希望我们的服务器容易受到 Windows 身份验证中的任何漏洞的影响。老实说,我不确定为什么我们需要虚拟目录。我目前正在与我们的服务器人员交谈,以找出更好的解决方案。
    • 是的,您可以在没有虚拟目录的情况下完成您刚才所说的一切。如果您以正确的方式进行 Windows 身份验证,则没有漏洞,但是像现在这样进行混合只是在自找麻烦。废弃这些虚拟目录,并在相应的控制器和/或操作方法上添加身份验证属性。然后让 web.config 担心如何对用户进行身份验证。
    • 我们需要某种形式的文件或目录来启用/禁用 IIS 中的身份验证方案,因为我们的服务器团队不希望允许开发人员在 web.config 中启用/禁用身份验证方案。我目前正在编写一个 ASPX 文件,该文件执行之前在操作中的逻辑。然后将设置 ASPX 文件以要求 Windows 身份验证,并且将向我们的防火墙添加一条规则以阻止对其进行外部访问。它并不完美,但应该可以。
    • 哇,你们肯定有一些阴暗的开发人员:P 不确定我是否希望他们加入我的团队。
    • 大公司里的繁文缛节并不等于黑幕开发者。
    【解决方案2】:

    使用上面提到的 Chevex 的 [Authorize] 属性很简单,或者如果您想要更多,您可以通过扩展为您的业务自定义授权。恕我直言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2011-06-15
      • 2010-10-11
      相关资源
      最近更新 更多