ASP.NET MVC操作和具有相同路径的虚拟目录

时间:2010-11-30 19:53:35

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

当控制器操作使用与虚拟目录相同的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" } );
}

2 个答案:

答案 0 :(得分: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的更多信息。

答案 1 :(得分:0)

上面提到的Chevex使用[Authorize]属性就好了,或者如果你想要更多,你可以为你的企业自定义授权。恕我直言。