asp.net-web-api – 在运行时禁用ApiController
发布时间:2020-12-16 04:04:16 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET Web API(.NET 4)应用程序,它有几个控制器.我们将在IIS上运行多个Web API应用程序实例,但有一点不同.某些IIS实例下只能使用某些控制器.我想的是在实例启动时禁用/卸载不适用于实例的控制器. 任何人都有一些信息可以指导我正确的方向吗? 解决
我有一个ASP.NET Web API(.NET 4)应用程序,它有几个控制器.我们将在IIS上运行多个Web API应用程序实例,但有一点不同.某些IIS实例下只能使用某些控制器.我想的是在实例启动时禁用/卸载不适用于实例的控制器.
任何人都有一些信息可以指导我正确的方向吗? 解决方法
您可以通过修饰DefaultHttpControllerActivator来放置自己的自定义IHttpControllerActivator.在内部只检查设置,只在允许时创建控制器.
当您从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); } } 您可以像这样切换激活器: GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator),new YourCustomControllerActivator()); 更新 自从我查看这个问题已经有一段时间了但是如果我今天要解决这个问题,我会稍微改变一下这个方法并使用自定义 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – HttpContext.Current如何工作?
- 在ASP.NET MVC4 Web应用程序上,w3wp的CPU使用率上升到100%
- asp.net-web-api – 为ASP.NET Web API应用程序生成特定于版
- asp.net-mvc – ASP.NET MVC:多个项目错误
- prolog – 如何理解ASP中的否定失败?
- ASP.net MVC Webforms视图引擎的缺点?
- ASP.NET Web Forms 4.5模型绑定,其中模型包含一个集合
- asp.net-mvc-3 – 大量使用ViewBag
- asp.net-mvc – ASP.NET MVC强类型部分视图,无法加载类型错
- asp.net-mvc-3 – 避免服务器端Razor视图和客户端jQuery模板