位置路径= " "拒绝用户= "?"阻止访问域根 ( "/" ),而不是显示 RouteConfig 默认值



我正在使用Katana以及web.config中的location路径来保护我的网站(因为该网站是ASP.Net web表单和MVC的混合体(。

我的默认路由是这样配置的,以允许在访问域根时显示登录页面(例如,www.example.com应该在www.example.com/Public/Login显示登录页面(:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Public", action = "Login", id = UrlParameter.Optional }
);
}

Web.config被设置为授予对登录控制器URL的访问权限,但拒绝未经授权的所有其他内容:

<location path="Public/Login">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

www.example.com外,此操作正常。在本地使用IISExpress,这些URL:

https://localhost:44374
https://localhost:44374/

重定向到:

https://localhost:44374/Public/Login?ReturnUrl=%2F

这是不正确的,因为匿名用户应该可以根据默认的RouteConfigMapRoute默认值访问/

有人能告诉我做错了什么吗?当一个域只访问根目录时,有什么方法可以授予访问权限吗?

在尝试了该网站的十几条建议后,我最终发现这是唯一适用于我的解决方案。我不确定Web窗体和MVC控制器的混合是否会导致这个问题(路由冲突?(,但将其添加到global.asax中效果很好:

namespace MyApplicationNamespace
{
public class MyApplicationName : System.Web.HttpApplication
{
protected void Application_Start()
{
// leave as is - left here to clarify where new method needs adding
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
if(Request.AppRelativeCurrentExecutionFilePath == "~/")
{
HttpContext.Current.RewritePath("/Public/Login"); // the MVC login controller/action
}
}
}
}

最新更新