1

我正在使用 MVC4 并在我的 global.asax 中创建了一个自定义路由来获取主机详细信息。

我已经设置了一个产品,让我的用户能够通过“theirbusiness.mydomain.com”登录

我现在想检查用户何时浏览到“randomstore.mydomain.com”,如果存储不存在,则实际存储已经在我的数据库中创建,将用户重定向到页面。

到目前为止我有

  public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.Add(new SubDomainRoute());
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Process", action = "Index", id = UrlParameter.Optional },
            constraints: null,
            namespaces: new[] { "WebApplication.Controllers" }
        );
    }

    protected void Application_Start()
    {
        log4net.Config.XmlConfigurator.Configure();
        AreaRegistration.RegisterAllAreas();
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}


public class SubDomainRoute : RouteBase
{
    public override RouteData GetRouteData(HttpContextBase httpContext)
    {
        log4net.ILog log = log4net.LogManager.GetLogger(this.GetType());
        log.Info(string.Format("GetRouteData"));
        log.Info(DateTime.Now);
        var url = httpContext.Request.Headers["HOST"];
        var index = url.IndexOf(".");

        if (index < 0)
            return null;
        log.Info(url);
        var subDomain = url.Substring(0, index);
        //check 


        log.Info(subDomain);

        return null;
    }

对我来说,获取变量 subDomain 并在数据库中检查它的最佳方法是什么。在 SubDomainRoute 类中尝试这样做感觉不对

4

1 回答 1

0

如果您想对所有请求进行检查/重定向,那么您可以轻松地Application_BeginRequest自行完成。

protected void Application_BeginRequest(object sender, EventArgs e)
{
  var context = ((HttpApplication)sender).Context;
  var host = context.Request.Headers["HOST"];

  // check the store is created in database and redirect if not exist.
}
于 2012-06-12T07:13:43.520 回答