aspnetcore/src/Microsoft.AspNet.Mvc.Core/ReflectedModelBuilder/ReflectedControllerModel.cs

50 lines
1.9 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.AspNet.Mvc.Routing;
namespace Microsoft.AspNet.Mvc.ReflectedModelBuilder
{
public class ReflectedControllerModel
{
public ReflectedControllerModel([NotNull] TypeInfo controllerType)
{
ControllerType = controllerType;
Actions = new List<ReflectedActionModel>();
// CoreCLR returns IEnumerable<Attribute> from GetCustomAttributes - the OfType<object>
// is needed to so that the result of ToList() is List<object>
Attributes = ControllerType.GetCustomAttributes(inherit: true).OfType<object>().ToList();
Filters = Attributes.OfType<IFilter>().ToList();
RouteConstraints = Attributes.OfType<RouteConstraintAttribute>().ToList();
AttributeRoutes = Attributes.OfType<IRouteTemplateProvider>()
.Select(rtp => new ReflectedAttributeRouteModel(rtp))
.ToList();
ControllerName = controllerType.Name.EndsWith("Controller", StringComparison.Ordinal)
? controllerType.Name.Substring(0, controllerType.Name.Length - "Controller".Length)
: controllerType.Name;
}
public List<ReflectedActionModel> Actions { get; private set; }
public List<object> Attributes { get; private set; }
public string ControllerName { get; set; }
public TypeInfo ControllerType { get; private set; }
public List<IFilter> Filters { get; private set; }
public List<RouteConstraintAttribute> RouteConstraints { get; private set; }
public List<ReflectedAttributeRouteModel> AttributeRoutes { get; private set; }
}
}