对控制器的限制
public class ControllerSelector : IHttpControllerSelector
{
HttpConfiguration _config;
IDictionarylt;string, HttpControllerDescriptor; _desriptors = new Dictionarylt;string, HttpControllerDescriptor;(StringComparer.OrdinalIgnoreCase);
public ControllerSelector(HttpConfiguration config)
{
_config = config;
}
void InitControllers()
{
if (_desriptors.Count lt;= 0)
{
lock (_desriptors)
{
if (_desriptors.Count lt;= 0)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(x =; !x.GlobalAssemblyCache !x.IsDynamic);
var controllerTypes = new Listlt;Type;();
foreach (var ass in assemblies)
{
controllerTypes.AddRange(ass.GetExportedTypes().Where(x =;typeof(ApiController).IsAssignableFrom(x)));
}
var descriptors = new Dictionarylt;string, HttpControllerDescriptor;();
foreach (var controllerType in controllerTypes)
{
var descriptor = new HttpControllerDescriptor(_config, controllerType.Name, controllerType);
_desriptors.Add(descriptor.ControllerName, descriptor);
}
}
}
}
}
public IDictionarylt;string, HttpControllerDescriptor; GetControllerMapping()
{
InitControllers();
return _desriptors;
}
public System.Web.Http.Controllers.HttpControllerDescriptor SelectController(System.Net.Http.HttpRequestMessage request)
{
InitControllers();
var routeData = request.GetRouteData();
var controllerName = Convert.ToString(routeData.Values.Get(;controller;));
if (string.IsNullOrWhiteSpace(controllerName))
{
throw new ArgumentException(string.Format(;没有在路由信息中找到controller;));
}
return