如何配置Asp.net Mvc将每个请求重定向到配置页面?

时间:2009-06-16 03:45:56

标签: asp.net-mvc configuration-management

对于Asp.net Mvc项目,当用户(应该是本网站的管理员)第一次访问该网站时,我需要将每个请求重定向到配置页面。此操作类似于默认登录页面(如果访问被拒绝,每个请求将重定向到默认登录页面)。

用户配置配置文件后,Route表将映射到普通控制器。

聚苯乙烯。此页面应有助于管理员检测错误配置并易于部署。

更新#1 我尝试在Codeplex上使用ASP.NET MVC WebFormRouting Demo。但是当用户访问“〜/ AccessDenied.aspx”或“〜/ web.config”等现有页面时,我无法重定向。

routes.MapWebFormRoute("RedirectToConfig", "{*anything}", "~/App_Config");

谢谢,

3 个答案:

答案 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个想法:

  • 在路由表顶部使用catch-all规则并对其进行约束以检查配置状态
  • 将此检查的代码放在GlobalAsax
  • 中的Application_BeginRequest中

全能理念的详细信息:

  • 使用网址“{* path}”创建规则并将其放在列表中
  • 仅在配置尚未完成的情况下创建约束以激活此规则
  • 创建一个简单的控制器,例如ConfigController只有一个动作,只能执行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。不要忘记在重定向之前检查导致无限循环的某些条件。