c# - 如何将路由参数注入(inject)_Layout.cshtml

标签 c# asp.net-mvc razor asp.net-core asp.net-core-mvc

我正在尝试使用 ASP.Net Core v1.1.0 创建 Multi-Tenancy Web 应用程序。单个用户可能属于多个租户(即,负责监督多个商店的区域经理)。用户还应该能够访问该站点并查看一些基本的营销 View ,而无需登录或没有任何租户的访问权限,但是功能将受到极大限制。

从结构上来说,到目前为止,我的项目并没有从默认的 ASP.Net Core MVC 模板发展太多......

Startup.cs 中,我按如下方式定义了路由,以尝试使用子域来定义用户尝试登录的商店。 “DEMO”表示用户只能看到营销 View :

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{tenant=DEMO}/{controller=Home}/{action=Index}/{id?}");
});

既然我已经这样做了,变量tenant就可以神奇地用在像这样的 Controller 操作定义中,而且它工作得很好:

public IActionResult Contact(string tenant)
{
    ViewData["Message"] = "Your contact page for " + tenant + ".";

    return View();
}

但我使用 _Layout.cshtml 作为包含大部分站点导航和一些个性化元素的包装器,我想做一些事情,例如禁用 DEMO 租户的大部分导航并显示所有其他租户的商店特定 Logo 。据我所知,没有与 _Layout.cshtml 关联的 Controller ,因此我需要一种不同的方式来注入(inject)该字符串。我尝试将以下行添加到 _ViewImports.cshtml:

@inject System.String tenant

我收到错误InvalidOperationException:没有注册类型“System.String”的服务。这让我相信我需要向ConfigureServices添加一些内容 > Startup.cs 中的方法,但我不知道我在做什么,也无法在网上找到任何类似的代码示例。我正在想象这样的事情:

services.AddScoped<ITenantFactory, MySeeminglyUnnecessaryFactory>();

但即便如此,我也不知道如何将 tenant 路由参数获取到工厂,或者如何去实现它。如果我能找到一种传入字符串的固定方法,我确信我可以用它来做我需要做的事情,直到改变布局的外观和感觉,并且我觉得限制用户访问非常舒服在 Controller 级别。预先感谢您的任何建议或想法!

最佳答案

关于c# - 如何将路由参数注入(inject)_Layout.cshtml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428526/

相关文章:

c# - LLBLGen - 如何使用 CatalogNameOverwriteHashtable

asp.net-mvc - asp.net MVC 中的授权属性和 jquery AJAX

javascript - 如何使用jquery在MVC中制作可编辑的表格?

asp.net-mvc - MVCSiteMapProvider - 最近添加的关键字,现在它们正在填充到 MenuHelper 的链接中

javascript - 将数组从 MVC Controller 传递到 Jquery

c# - 打印转换后的 XML

c# - Marshal.SizeOf(typeof(IntPtr)) 与 sizeof(IntPtr)

jquery - 如何在 ASP.NET MVC 应用程序中实现 "Select All"复选框?

asp.net-mvc - 如何在某些HTML中内嵌Razor代码?

c# - c#中的Get和Set方法到底是如何使用和实现的