C# 拦截 Http 请求

Posted

技术标签:

【中文标题】C# 拦截 Http 请求【英文标题】:C# Intercept Http Request 【发布时间】:2017-02-28 22:58:05 【问题描述】:

我有一个 .Net 应用程序(控制台或 Web),我需要在 C# 中创建一个包含事件以自动触发的 Helper 类,并在我调用 RESTful 服务时记录请求和响应(在我的应用程序中而不是外部应用程序中) 我更喜欢使用原生框架而不是库。这可能吗?

【问题讨论】:

所以 JQuery 不是一个选项? 不,我需要使用 C# 来执行此操作,为此创建自定义事件 您是否在询问如何拦截来自您无法控制的外部应用程序的 HTTP 流量?大概不是您的应用程序发出您要记录的请求?请澄清。 @AlexK。没有在我的应用程序中,我编辑问题 将事件处理构建到发出 Web 请求的类中,这是一个选项吗? 【参考方案1】:

您可以创建一个中间件来拦截 HTTP 处理。我知道它在 ASP.NET Core 中应该是相当直接的,我刚刚发现了一些与 .NET 类似的东西。

https://www.azurefromthetrenches.com/capturing-and-tracing-all-http-requests-in-c-and-net/

在上面的链接中,您将了解如何在 .NET 中侦听事件。您测试事件类型,如果它们是所需类型,您将能够进行自定义处理、捕获、跟踪等。

这个问题已经 3 年了,所以它可能对你没有帮助,但是像我这样的其他人。此外,如果您能分享对您有用的方法,那就太好了。

【讨论】:

【参考方案2】:

如果您无法控制应用程序和服务,您可以在 C# 中设置代理服务器并通过它路由其他应用程序流量(使用该应用程序或全局 windows/linux/wtw 设置)。在 C# 中,可以使用HttpListener(用于监听)和HttpWebRequest 来转发请求。全功能代理服务器示例:Titanium Web Proxy。

如果您可以控制其中任何一个,则可以使用 this 之类的东西。

【讨论】:

也就是说,如果您无法控制正在请求的应用程序和服务本身。 没有控制是什么意思? .. 这是我的应用程序,我需要创建一个 Helper 类,其中包含一个自动触发的事件,以捕获并记录我的应用程序中的所有请求和响应.. 我还需要一个代理?? 好的。由于您可以完全控制您的应用程序,因此您应该尝试类似 [***.com/questions/18924996/… 的方法。因为它不会乱扔任何与代理相关的代码。 对于HttpClient ?【参考方案3】:

您可以创建自己的事件并在对服务的方法调用上触发它。所以是的,这是可能的。您必须创建一个服务调用者和您自己的事件。在服务调用者的每个方法上,触发事件。我不会在how to create an event 上添加代码或示例。你应该自己做研究。

【讨论】:

我需要一个自定义的动态事件,以便通过任何 Web 服务调用自动触发,我不想最终在我的应用程序中的每个位置添加代码 @meJustAndrew 我认为他想要一些类似于 JQuery 中的 Ajax-global-events 的东西,(api.jquery.com/category/ajax/global-ajax-event-handlers) 他可以在一个地方捕获它们。 - 但没有 jquery。

以上是关于C# 拦截 Http 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何使用angularJS拦截器只拦截特定的http请求?

Fiddler拦截http请求修改数据

拦截 Android 应用发送的 HTTP 请求

SpringBoot 三种拦截http请求方式Filter,interceptor和aop

如何拦截所有http请求,包括表单提交

解决拦截器对ajax请求的的拦截