位置路径=""拒绝用户="?"阻止访问域根(“/”)而不是显示 RouteConfig 默认值
location path="" deny users="?" prevents access to domain root ("/") instead of showing RouteConfig default
我正在使用 Katana 来保护我的网站,以及 web.config 中的 location
路径(因为该网站是 ASP.Net 网络表单和 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
这是不正确的,因为根据默认的 RouteConfig MapRoute
默认值,匿名用户应该可以访问 /
。
任何人都可以告诉我做错了什么吗?当一个域只有根访问时,有什么方法可以授予访问权限?
在尝试了来自该网站的十几个建议之后,我最终发现这是唯一适用于我的案例的解决方案。我不确定网络表单和 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
}
}
}
}
我正在使用 Katana 来保护我的网站,以及 web.config 中的 location
路径(因为该网站是 ASP.Net 网络表单和 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
这是不正确的,因为根据默认的 RouteConfig MapRoute
默认值,匿名用户应该可以访问 /
。
任何人都可以告诉我做错了什么吗?当一个域只有根访问时,有什么方法可以授予访问权限?
在尝试了来自该网站的十几个建议之后,我最终发现这是唯一适用于我的案例的解决方案。我不确定网络表单和 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
}
}
}
}