使用Net Web 4.5.1
开始尝试在默认文档(即index.html)上配置规则:
routes.MapPageRoute(
"Default",
"",
"~/Statics/anybody.html"
);
如果在本地调试期间我想要(没有扩展名)
http://localhost:52065
转到
http://localhost:52065/Statics/anybody.html
我希望任何未经授权的请求都指向启动页面(即/Statics/anybody.html)。
答案 0 :(得分:1)
我对发布此内容犹豫不决,但是,您可以这样做:
public class AuthenticatedConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
return httpContext.Request.IsAuthenticated;
}
}
然后你可以使用以下路线:
routes.MapRoute(name: "Default",
url: "{*url}",
defaults: "~/Statics/anybody.html", constraints: new AuthenticatedConstraint());
routes.MapRoute(name: "DefaultNotAuthenticated",
url: "{*url}",
defaults: "~/Statics/notauth.html");
第一个匹配任何经过身份验证的请求,并将其返回到anybody.html文档;第二个匹配所有未经验证的路由并将它们放在notauth.html文档中。您可以以任何方式调整您的网址。
然而,我提到我对发布此内容犹豫不决;虽然这应该并且将适用于简单的请求,但是ASP.NET MVC路由引擎非常复杂,很多东西都取决于小东西,通配符,处理内容的顺序等等。很容易“意外”使这条路线在你自己的代码中不起作用。
话虽如此,路线并非万无一失。有几种方法可以绕过路由引擎。因此,这本身并不是“安全”的解决方案。无论是在控制器,过滤器还是单个页面上执行此操作,我都会坚持为每个请求检查auth。这将作为一种“额外的”安全措施,有时会在它们到达之前捕获它们,但是如果有什么东西滑过裂缝,页面就会处理自身的安全性。
答案 1 :(得分:0)
尝试在RouteConfig.cs中添加此行
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("");
}
答案 2 :(得分:0)
方法1:
如果您正在使用表单身份验证,则可以更改web.config中元素的URL,如果用户无权访问,它将重定向到指定的页面。
<forms loginUrl="~/Account/Login" defaultUrl="~/Account/Login" slidingExpiration="false" />
方法2:
可以使用操作过滤器,如果用户未经过身份验证,则重定向到指定页面,否则允许当前请求。