Asp.net-Web-Api
在執行時禁用 ApiController
我有一個 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());更新
自從我查看這個問題以來已經有一段時間了,但是如果我今天要解決它,我會稍微改變方法並使用 custom
IHttpControllerSelector。這在啟動器之前呼叫,並為啟用和禁用控制器提供了一個更有效的位置……(儘管其他方法確實有效)。您應該能夠裝飾或繼承自DefaultHttpControllerSelector.