可以采取多种方法来禁用评论中提到的某些操作或路由。
1.) [NonAction]
属性
The [NonAction]
属性来自System.Web.Http
可应用于 ApiController 操作。如果调用此类方法,则服务器将返回 HTTP 代码 404(未找到方法)。该属性只能应用于方法级别,不能应用于类。所以每个方法都必须用这个属性来装饰。
2.) 编写自定义操作过滤器
这种方法可以让您更好地控制。您的过滤器可以应用于类级别,并且您可以实现一些更高级的逻辑,在这些逻辑中您的控制器是否可以访问(取决于日期、许可证、功能切换等)
public class MyNoActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (IfDisabledLogic(actionContext))
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.NotFound);
}
else
base.OnActionExecuting(actionContext);
}
}
[MyNoActionFilter]
public class ValuesController : ApiController
{
// web api controller logic...
}
3.) 路由配置WebApiConfig.cs
您可以在 WebApiConfig 中为无法访问的控制器添加 Web api 路由,并将该路由映射到不存在的控制器。然后框架采用此路线,找不到控制器并向客户端发送 404 返回代码。将这些路由放在开头很重要,以避免意外的执行。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Routes.MapHttpRoute(
name: "DisabledApi",
routeTemplate: "api/b/{id}",
defaults: new { controller = "DoesNotExist", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
因为您声明由于工作量而不要使用属性,所以我推荐第三个选项,因为路由配置为此定义了一个位置。如果您想在将来再次启用该路由,则只需删除一个路由定义即可。