fdm*_*ion 1 asp.net asp.net-web-api
我正在用 C# 编写 ASP.NET Web API 2。我想要的是一个包罗万象的方法,它将针对传入我的 Web API 的每个请求执行。
如果该方法返回 null,则应继续原来的路由,寻找正确的方法。但是,如果该方法返回 HTTPResponseMessage,则服务器应返回该响应,而不继续进行正常路由。
用例是处理可能影响整个 API 的各种场景的能力。例如:禁止单个 IP 地址、阻止(或白名单)某些用户代理、处理 API 调用计数(例如,某人只能向任何人发出 X 请求)API 方法发出 X 个请求)。
我现在能想到的唯一方法就是在我为 API 编写的每个新方法中逐字包含一个方法调用。例如,
[HttpGet]
public HttpResponseMessage myNewMethod()
{
// I want to avoid having to do this in every single method.
var check = methodThatEitherReturnsResponseOrNull(Request);
if (check != null) return (HttpResponseMessage)check;
// The method returned null so we go ahead with normal processing.
...
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在路由中实现这一点吗?
这就是操作过滤器的用途。这些属性可以全局放置在类(控制器)或方法(操作)级别。这些属性可以进行预处理(在操作执行之前执行一些代码)或后处理(在操作执行之后执行代码)。
使用预处理时,您可以选择将结果返回给调用者,并且根本不触发您的方法(操作)。这对于模型验证、授权检查等很有用。
要全局注册过滤器,请编辑该WebApiConfig.cs文件。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new YourFilterAttribute()); // add record
// rest of code
}
}
Run Code Online (Sandbox Code Playgroud)
要创建自定义属性,System.Web.Http.Filters.ActionFilterAttribute您可以继承或实现接口System.Web.Http.Filters.IActionFilter,也可以实现IAuthorizationFilter/AuthorizationFilterAttribute,或者如果您特别想要允许/拒绝请求,则
听起来您还想创建多个属性,每个属性对应一个角色,例如 IP 过滤或计数调用等。这样,它将更加模块化,而不是一个庞大的授权过滤器。
有很多像这样的教程(在我的谷歌搜索结果中随机选择)。我不会发布代码,因为你也没有这样做,所以我只是猜测你想做什么。
| 归档时间: |
|
| 查看次数: |
3234 次 |
| 最近记录: |