Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc 理解aspnet核心中的元数据_Asp.net Core Mvc_Metadata_Asp.net Core Webapi - Fatal编程技术网

Asp.net core mvc 理解aspnet核心中的元数据

Asp.net core mvc 理解aspnet核心中的元数据,asp.net-core-mvc,metadata,asp.net-core-webapi,Asp.net Core Mvc,Metadata,Asp.net Core Webapi,我从这里被重定向到: 我正在从.NET4.6转换解决方案,我正在研究元数据 在旧的解决方案中,我有一个数据注释元数据提供程序的自定义实现,我对其进行了如下扩展 public class ApiMetadataProvider : DataAnnotationsModelMetadataProvider, IDisposable { public IResourceProvider ResourceProvider { get; } public I

我从这里被重定向到:

我正在从.NET4.6转换解决方案,我正在研究元数据

在旧的解决方案中,我有一个数据注释元数据提供程序的自定义实现,我对其进行了如下扩展

   public class ApiMetadataProvider : DataAnnotationsModelMetadataProvider, IDisposable
    {
        public IResourceProvider ResourceProvider { get; }

        public ICoreDataContext CoreDb { get; }

        public ApiMetadataProvider(IResourceProvider resourceProvider, ICoreDataContext core)
        {
            ResourceProvider = resourceProvider;
            CoreDb = core;
        }

        protected override ModelMetadata CreateMetadata(
                IEnumerable<Attribute> attributes,
                Type containerType,
                Func<object> modelAccessor,
                Type modelType,
                string propertyName)
        {
            ModelMetadata modelMetadata = base.CreateMetadata(
                attributes,
                containerType,
                modelAccessor,
                modelType,
                propertyName);

            Type serverType = (modelType == typeof(string))
                ? typeof(string) 
                : modelType.ImplementsGenericInterface(typeof(IEnumerable<>)) ?? modelType;

            if (serverType.IsGenericType && serverType.Name.StartsWith("Nullable") && typeof(Nullable<>).MakeGenericType(serverType.GenericTypeArguments) == serverType) { serverType = serverType.GenericTypeArguments[0]; }

            modelMetadata.AdditionalValues.Add("ServerType", serverType.AssemblyQualifiedName);

            SetTemplateHint(modelMetadata);
            SetCustomAttributes(attributes, modelMetadata, modelType, propertyName);
            SetResourceStrings(modelMetadata);

            return modelMetadata;
        }
       ....
}
控制员通常会基于此做出决策

我希望重现这种行为,关键是能够从堆栈中获得“最终元”的定制版本(我从中收集:……该元现在以某种方式成为“提供者链”)

所以我有几个问题

如何在给定类型的元信息中添加或删除/更新自定义“属性”/属性? 在执行所有提供程序之后,如何获取堆栈视为“最终结果”的meta实例? 现有的解决方案经常将这些元信息传递给客户端JS代码,以允许在浏览器中进行“动态组件构造”,这是一个具有任何形式的最佳实践的场景,我可以从中收集更多建议(也许你们有一篇博文或其他东西让我开始)

protected MetadataContainer GetMetadataForType(Type type)
{
         return new MetadataContainer(MetaProvider.GetMetadataForType(null, type));
}