对于Asp.net Mvc项目,当用户(应该是本网站的管理员)第一次访问该网站时,我需要将每个请求重定向到配置页面。此操作类似于默认登录页面(如果访问被拒绝,每个请求将重定向到默认登录页面)。
用户配置配置文件后,Route表将映射到普通控制器。
聚苯乙烯。此页面应有助于管理员检测错误配置并易于部署。
更新#1 我尝试在Codeplex上使用ASP.NET MVC WebFormRouting Demo。但是当用户访问“〜/ AccessDenied.aspx”或“〜/ web.config”等现有页面时,我无法重定向。
routes.MapWebFormRoute("RedirectToConfig", "{*anything}", "~/App_Config");
谢谢,
答案 0 :(得分:2)
根据您的描述,这似乎是授权问题,因此我建议使用自定义Authorize属性类(继承自AuthorizeAttribute)。
从此处可以覆盖OnAuthorization方法,您可以在其中检查用户是否已完成所需的配置步骤并相应地设置filterContext.Result。基本实现看起来像这样(假设您有一个有效/帐户/配置路由):
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
var user = ; // get your user object
if(user.IsConfigured == false) // example
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{
"ConfigureUserRoute",
filterContext.RouteData.Values["ConfigureUserRoute"]
},
{"controller", "Account"},
{"action", "Configure"}
});
return;
}
}
}
您可以在StackOverflow上找到有关如何创建自定义AuthorizeAttribute类的其他示例。
答案 1 :(得分:1)
2个想法:
全能理念的详细信息:
RedirectToUrl("config.aspx")
但是Application_BeginRequest中的解决方案会更简单,因为在一个地方处理这个问题的整个代码
答案 2 :(得分:0)
现在,我可以应用my another question的技术来解决这个问题。通过在应用程序启动时在静态实例中保留一些值。请查看以下代码。
部分ConfigBootstapper.cs
public class ConfigBootstapper
{
public static EnableRedirectToConfigManager = false;
}
部分ConfigModule.cs
void HttpApplication_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (ConfigBootstapper.EnableRedirectToConfigManager)
{
app.Response.Redirect("~/App_Config");
}
}
部分Global.asax
protected void Application_Start()
{
[logic for setting ConfigBootstapper.EnableRedirectToConfigManager value]
}
PS。不要忘记在重定向之前检查导致无限循环的某些条件。