在每个POST / GET请求之前调用方法/执行操作.NET Core

时间:2017-03-21 13:43:02

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

我想要实现的目标 - 我的应用程序只是ASP .Net Core应用程序。 它不是Web API。我想在从我的应用程序发送/获取请求到外部源之前执行方法,例如: 我发送一个帖子请求,检查一些网站API的SSL到期日期,它返回给我一个回复。根据回复,我发送了另一个请求。我不希望在每个请求之前发出call方法声明,我想在全球范围内进行。

我试图根据http://www.sulhome.com/blog/10/log-asp-net-core-request-and-response-using-middleware

来实现这一目标

当它发生时,这个中间件只能用于内部请求(应用程序内部的路由请求)(我有它工作)。

是否有可能为所有请求执行此操作?

提前致谢

2 个答案:

答案 0 :(得分:2)

.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);
        }
}

在Config方法的Startup.cs中,只需重新启动它:

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

答案 1 :(得分:0)

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

  1. 使用面向方面的编程库(如https://www.postsharp.net
  2. 实现您自己的Request类(具有您想要的全局行为),并确保使用此类(或从其继承的类)完成所有请求。
  3. 对于第二点,一个好的机制是基类提供了一个SendRequest方法,它接收HttpRequestMessage并执行全局代码。从中继承的类使用此方法发送请求,并且无法访问基础HttpClient(因此它们无法围绕SendRequest方法运行)。