【问题标题】:Invoke method/Do action before every POST/GET request .NET Core在每个 POST/GET 请求 .NET Core 之前调用方法/执行操作
【发布时间】:2017-08-13 05:23:38
【问题描述】:

我想要实现的目标 - 我的应用程序只是 ASP .Net Core 应用程序。 它不是 Web API。我想在我的应用程序向外部源发出每个 post/get 请求之前执行方法,例如: 我正在发送一个发布请求,以检查某些网站 API 的 SSL 到期日期,它会返回给我一个响应。根据回复,我是否正在发送另一个请求。我不想在每个请求之前放置调用方法语句,我想全局执行。

我试图基于http://www.sulhome.com/blog/10/log-asp-net-core-request-and-response-using-middleware实现这一目标

当它发生时,这个中间件只适用于内部请求(在应用程序内路由请求)。

是否有可能对所有请求都这样做?

提前致谢

【问题讨论】:

    标签: c# asp.net post asp.net-core middleware


    【解决方案1】:

    .NET Core 允许创建自定义中间件以进入 MV 管道。这是一个例子:

    public class MyMiddleware
        {
            private readonly RequestDelegate _next;
    
    
            public MyMiddleware(RequestDelegate next)
            {
                _next = next;
            }
    
            public async Task Invoke(HttpContext context)
            {
                //do your checkings
                await _next(context);
            }
    }
    

    在 Startup.cs 的 Config 方法中注册它:

    app.UseMiddleware<MyMiddleware>(Options.Create(options));
    

    【讨论】:

    • 我已经按照你说的做了所有事情,但是只有当请求我的应用程序我的应用程序时,它才会触发这个任务调用。我想要实现的是 Invoke() 在这样的情况下执行:在我的控制器中执行操作后,“在下一个方法中”,请求被发送到外部网站。在发送此请求之前,我想执行 Invoke()。所以 1. 将请求发布到我的应用程序。 2. 一些方法被执行 - 在控制器和其他类中 3.Invoke() 被执行 - 在这个任务中发送检查 SSL 的请求 4.根据响应执行其他动作
    • 也许你必须在配置的管道末尾添加中间件?
    • 据我了解(如果我错了,请纠正我)他想捕获传出请求,而不是传入请求
    • 卡洛斯 G 是对的。这正是我要说的
    【解决方案2】:

    由于您正在谈论对传出请求进行调用,因此您有两种机制来解决问题:

    1. 使用面向方面的编程库(如https://www.postsharp.net
    2. 实现您自己的 Request 类(具有您想要的全局行为)并确保所有请求都使用该类(或从它继承的类)完成。

    对于第二点,一个好的机制是基类提供了一个SendRequest 方法,该方法接收一个HttpRequestMessage 并执行全局代码。继承自它的类使用此方法发送请求,并且无法访问底层的HttpClient(因此它们无法绕过SendRequest 方法)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2018-09-04
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多