C# 拦截 HTTP 请求

3

我有一个.Net应用程序(控制台或Web),我需要创建一个Helper类,在调用RESTful服务时自动触发并记录请求和响应(在我的应用程序内而非外部应用程序)。

我更喜欢使用本地框架而不是库。是否可能?


那么 jQuery 不是一个选择? - Stavm
不需要使用C#来完成这个任务,可以创建自定义事件。 - Ahmed
你是在问如何拦截来自无法控制的外部应用程序的HTTP流量吗?我猜想这些请求并不是你自己的应用程序发出的,你想要记录这些请求是吗?请澄清一下。 - Alex K.
@AlexK。不,我在我的应用程序中编辑问题。 - Ahmed
将事件处理程序构建到进行Web请求的类中,这是一个选项吗? - Lasse V. Karlsen
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Alex K.
3个回答

1
您可以创建一个中间件来拦截HTTP处理。我知道在ASP.NET Core中应该非常直接,而且我刚刚为.NET找到了类似的东西。

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

在上面的链接中,您将找到如何在.NET中监听事件的方法。您可以测试事件类型,如果它们是所需的类型,则可以执行自定义处理、捕获、跟踪等操作。
这个问题已经有3年了,所以它可能对您没有帮助,但对像我一样来到这里的其他人可能有帮助。此外,如果您能分享您的解决方案,那就太好了。

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

也就是说,如果您无法控制请求应用程序和服务本身。 - V. Kasparavičius
你说什么没有控制?这是我的应用程序,我需要创建一个Helper类,其中包含一个自动触发的事件,以便在我的应用程序中捕获和记录所有请求和响应。那我还需要一个代理吗? - Ahmed
好的。由于您完全控制应用程序,因此您应该尝试类似于[https://dev59.com/Z2Mk5IYBdhLWcg3w2BTJ]的方法。这样它不会在代码中添加任何代理相关内容。 - V. Kasparavičius
对于 HttpClient - Kiquenet

0

您可以创建自己的事件,并在服务方法调用时触发它。所以,是的,这是可能的。您将需要创建一个服务调用程序和自己的事件。在服务调用程序的每个方法上,触发该事件。我不会在如何创建事件中添加代码或示例。您应该自己进行研究。


我需要一个定制的、动态的事件来自动触发任何Web服务调用,我不想在我的应用程序中到处添加代码。 - Ahmed
@meJustAndrew 我认为他想要类似于JQuery中的Ajax-global-events(https://api.jquery.com/category/ajax/global-ajax-event-handlers/)的东西,可以在一个地方捕获所有事件,但不使用jquery。 - Stavm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接