Web API 控制器中多个 HttpPost 方法的共享逻辑

Posted

技术标签:

【中文标题】Web API 控制器中多个 HttpPost 方法的共享逻辑【英文标题】:Shared logic for Multiple HttpPost method in Web API controller 【发布时间】:2021-12-25 16:11:23 【问题描述】:

我在 Web API 控制器中有多个 HttpPost 方法,我还需要检查所有这些方法的某些条件。我怎样才能在控制器中添加这个逻辑而不在每个方法中重复代码? 示例:

public class OnboardingController : ApiController
// can i check for conditions before the code enters to any of the httpPost?

[HttpPost]
[Route("api/Onboarding/Method1", Name = "Onboarding/Method1")]

// some code

[HttpPost]
[Route("api/Onboarding/Method2", Name = "Onboarding/Method2")]

// some code

【问题讨论】:

您要检查什么样的do条件?每个条件是否特定于每个方法,或者您是否有一组条件应该应用于所有方法?如果条件不满足,你想做什么? 将应用于所有人的条件集。在try and catch里面可能 例如,如果用户没有权限,代码将不会进入任何 httpPost 路由 这种事情应该通过授权系统来处理。 【参考方案1】:

这可以通过过滤器来实现。它们允许您在将控制权传递给控制器​​及其方法之前拦截请求并执行一些操作。例如,如果用户无权访问请求的端点,您可以记录请求参数或返回 403 Not Authorized。

内置过滤器很少,您也可以创建自己的过滤器。

阅读有关过滤器的更多信息:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-6.0

本文展示了如何使用内置的授权过滤器:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/simple?view=aspnetcore-6.0

【讨论】:

以上是关于Web API 控制器中多个 HttpPost 方法的共享逻辑的主要内容,如果未能解决你的问题,请参考以下文章

Web API 控制器中多个 HttpPost 方法的共享逻辑

具有多个 HttpPost 方法的 Web Api 中的 CORS 问题

无法使用具有多个参数的 MVC Web Api HttpPost 修饰操作

具有多个参数的 Web API 路由

Web API Post 方法 frombody 为空

简单的发布到 Web Api