gpt4 book ai didi

c# - 使用 model.Filters.Add() 配置 ASP.NET Core razor 页面过滤器

转载 作者:行者123 更新时间:2023-12-02 09:44:25 24 4
gpt4 key购买 nike

我可以在启动时设置一个 ASP.NET Core razor 页面过滤器,它可以使用 <<TType>>() 进行依赖注入(inject)。而不是new Type() :

services.AddMvc(options =>
{
options.Filters.Add<Filters.AdminPageFilter>();
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddHttpContextAccessor();

这工作正常,但想将其应用到目录中,执行以下操作:

services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddFolderApplicationModelConvention(
"/Admin",
model => model.Filters.Add<Filters.AdminPageFilter>()
);
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

编译提示:

Error CS7036 There is no argument given that corresponds to the required formal parameter 'configureSource' of 'ConfigurationExtensions.Add(IConfigurationBuilder, Action)' Startup.cs 71 Active

有没有办法只通过 model.Filters.Add<Filters.AdminPageFilter>() 指定类型并且不通过 model.Filters.Add(new Filters.AdminPageFilter()) 创建新实例?

最佳答案

TypeFilterAttribute可以帮忙解决这个问题。它作为过滤器工厂运行,可以使用依赖项注入(inject)生成过滤器。它实现了IFilterMetadata ,因此可以将其添加到 model.Filters代替您的 AdminPageFilter。

这是一个扩展方法,可以为您提供相同的 .Add<FilterType>功能:

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

public static void Add<TFilterType>(this ICollection<IFilterMetadata> filters) where TFilterType : IFilterMetadata {
var typeFilterAttribute = new TypeFilterAttribute(typeof(TFilterType));
filters.Add(typeFilterAttribute);
}

关于c# - 使用 model.Filters.Add<TFilterType>() 配置 ASP.NET Core razor 页面过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53607840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com