【问题标题】:Automatically set Controller properties based on route parameters in multi-tenant application在多租户应用程序中根据路由参数自动设置控制器属性
【发布时间】:2015-02-05 11:13:39
【问题描述】:

我目前正在开发一个内容托管的多租户应用程序,该应用程序将具有一组管理员可访问的页面和一组面向公众的页面。我不太担心管理员可访问的页面,因为我将拥有一个所有用户用于登录管理区域的单个管理 URL。我的问题涉及面向公众的页面。

如果我们设想管理页面允许您为一组按学校分组的大学网站创建和管理内容,而面向公众的页面仅显示该内容。

我设置了以下路径来处理访问面向公众的页面:

routes.MapRoute(
            name: "Site",
            url: "{schoolName}/{collegeName}/{controller}/{action}/{id}",
            defaults: new { schoolName = "Oxford", collegeName = "Balliol",  controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这可以正常工作,并且可以毫无问题地调用以下控制器操作:

public class HomeController
{
    public ActionResult Index(string schoolName, string collegeName)
    {
        return View();
    }
}

但是我想知道是否有办法让它工作而不必总是接受 schoolNamecollegeName 作为我的控制器操作中的参数?如果我在为面向公众的页面创建的每个操作中总是必须接受这些参数,我可以看到这将成为一个问题。

我正在考虑创建一个PublicFacingController,所有面向公众的页面都继承自其中,其中包含学校名称和学院名称的属性。但是我不确定如何在不将它们作为参数传递给操作的情况下填充它们以在派生控制器中使用。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以访问基本控制器中的Controller.Request 属性以获取学校和学院的值。

    【讨论】:

    • 这让我找到了答案!您可以通过Request 访问RouteData。所以我能够在PublicFacingController 中执行以下操作:this.Request.RequestContext.RouteData.Values["collegeName"].ToString(); 谢谢!
    猜你喜欢
    • 2016-12-12
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多