我认为HttpControllerSelector是正确的方法。
Http控制器选择器:
public class HttpControllerSelector : IHttpControllerSelector
{
private readonly HttpConfiguration _httpConfiguration;
public HttpControllerSelector(HttpConfiguration httpConfiguration)
{
this._httpConfiguration = httpConfiguration;
}
public HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
return new HttpControllerDescriptor(this._httpConfiguration,
nameof(ValuesController),
typeof(ValuesController));
}
public IDictionary<string, HttpControllerDescriptor> GetControllerMapping()
{
var mapping = new Dictionary<string, HttpControllerDescriptor>
{
{
nameof(ValuesController),
new HttpControllerDescriptor(this._httpConfiguration,
nameof(ValuesController),
typeof(ValuesController))
}
};
return mapping;
}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Services.Replace(typeof(IHttpControllerSelector), new HttpControllerSelector(config));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
因此,在HttpControllerSelector中,您可以做任何您想做的事情。举个简单的例子,这里有一个控制器,它总是被选中的。在这一点上,你可以使用一个工厂或适合你的东西。
希望这能给你一个想法怎么做,快乐编码!