1

我有一个非常简单的问题:根据我部署 Identity Server 3 的环境,我想让登录页面显示不同的图像。图像源位置在 中定义,web.config并根据构建配置进行转换。

我正在覆盖部分_login.html以允许显示图像,但我无法找到如何(轻松)将定义此配置变量的变量传递到视图中。

我相信这可以通过使用CustomViewService此处显示的:http: //identityserver.github.io/Documentation/docs/advanced/customizingViews.html但我想知道是否有更简单的方法将变量传递到视图中无需创建CustomViewService.

是否可以扩展CommonViewModel并获得 Identity Server 3 以在运行时解决此问题?这ExtendedCommonViewModel将非常简单:

public class ExtendedCommonViewModel : CommonViewModel
{
  public string ImageLocation
  {
     get { return ConfigurationManager.AppSettings["ImageLocation"].ToString(); }
  }
}

然后在_login.html视图中使用它作为<img src="{ImageLocation}" />

我意识到这仍然需要解析为Replace默认视图服务中的函数,所以这就是这个想法落空的地方:https ://github.com/IdentityServer/IdentityServer3/blob/master/source/Core/Services /DefaultViewService/DefaultViewService.cs

所以重申一下;有没有一种简单的方法可以将变量传递到 Identity Server 3 中的覆盖部分视图,而无需创建一个CustomViewService

编辑 :

附加 - 我可以通过将变量作为Scripts参数传递给解决方案来查看解决方案,DefaultViewServiceOptions但这似乎太老套了。

可以扩展DefaultViewServiceOptions并添加一个自定义字典,该字典可以包含自定义模型参数,然后可以在视图中使用。这似乎是最好的解决方案,但意味着改变DefaultViewService

4

1 回答 1

0

你最好创建自己的IViewService实现。

可以继承DefaultViewService并仅覆盖您需要更改的内容。

就您而言,我认为您可以使用所需的任何数据创建CustomLoginViewModel继承。LoginViewModel

public class CustomViewService : DefaultViewService 
{
   ...    
    public override Task<Stream> Login(LoginViewModel model, SignInMessage message)
    {
        var customVm = new CustomViewModel { MyProp = "123" };
        return Render(customVm, LoginView);
    }
}
于 2016-08-08T10:51:46.290 回答