如何为MapMvcAttributeRoutes添加一些RouteData?

Dav*_*eau 6 c# asp.net-mvc-routing routeattribute asp.net-mvc-5

我正在建立一个多租户网站,我在我的应用程序中使用MapMvcAttributeRoutes和标准MapRoute.当我在不使用RouteAttribute的控制器中时,我也使用此代码成功获取子域名.我无法从使用RouteAttribute的任何控制器/操作中获取子域值.RouteData集合中不存在该值.那么当我在使用RouteAttribute的Action中时如何获取子域值?

这里是RegisterRoutes的代码:

public static void RegisterRoutes(RouteCollection routes)
{
    const string mainNamespace = "Presentation.Website.Controllers";
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes(); // Activate attribute Routing

    // This will add the parameter "subdomain" to the route parameters
    // TODO: Do the same for MapMvcAttribute! but how... ?
    routes.Add(new SubdomainConfig(new[] { "www", "yourdomain", "mail" }, new[] { mainNamespace }, CoreSettings.SubDomainKey));

    routes.MapRoute(name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    namespaces: new[] { mainNamespace });
}
Run Code Online (Sandbox Code Playgroud)

例如

这将有效:

[AllowAnonymous]
public ActionResult Register(string subdomain)
{
    ViewBag.Subdomain = subdomain;
    var vModel = new RegisterViewModel();
    return View(vModel);
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

[Route("login"), AllowAnonymous]
public ActionResult Login(string returnUrl, string subdomain)
{
    ViewBag.Subdomain = subdomain; // <----------- Empty
    ViewBag.ReturnUrl = returnUrl;
    return View();
}
Run Code Online (Sandbox Code Playgroud)

大卫