我有一个ASP.NET Web API(.NET 4)应用程序,它有几个控制器.我们将在IIS上运行Web API应用程序的多个实例,但有一点不同.某些IIS实例下只能使用某些控制器.我想的是在实例启动时禁用/卸载不适用于实例的控制器.
任何人都有一些信息可以指导我正确的方向吗?
您可以IHttpControllerActivator通过装饰 DefaultHttpControllerActivator来放置您自己的自定义。在里面只检查一个设置,如果允许的话只创建控制器。
当您从 Create 方法返回 null 时,用户将收到 404 Not Found 消息。
我的示例显示正在检查应用程序设置(App.Config 或 Web.Config)中的一个值,但显然这可以是任何其他环境感知条件。
public class YourCustomControllerActivator : IHttpControllerActivator
{
private readonly IHttpControllerActivator _default = new DefaultHttpControllerActivator();
public YourCustomControllerActivator()
{
}
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor,
Type controllerType)
{
if (ConfigurationManager.AppSettings["MySetting"] == "Off")
{
//Or get clever and look for attributes on the controller in controllerDescriptor.GetCustomAttributes<>();
//Or use the contoller name controllerDescriptor.ControllerName
//This example uses the type
if (controllerType == typeof (MyController) ||
controllerType == typeof (EtcController))
{
return null;
}
}
return _default.Create(request, controllerDescriptor, controllerType);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样切换激活器:
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), new YourCustomControllerActivator());
Run Code Online (Sandbox Code Playgroud)
更新
我已经有一段时间没有看到这个问题了,但是如果我今天要解决它,我会稍微改变方法并使用自定义IHttpControllerSelector. 这在激活器之前被调用,并为启用和禁用控制器提供了一个稍微更有效的地方......(尽管另一种方法确实有效)。您应该能够装饰或继承DefaultHttpControllerSelector.
| 归档时间: |
|
| 查看次数: |
3751 次 |
| 最近记录: |