Asp.net 如何使用MessageProcessingHandler结束处理并返回响应消息?

Asp.net 如何使用MessageProcessingHandler结束处理并返回响应消息?,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我在WebAPI中偶然发现了MessageProcessingHandler类。它是DelegatingHandler的孩子。课堂上几乎没有任何信息,MS文档也特别稀薄,只是说: 如果处理程序不需要 异步操作,因为对请求和响应的操作 信息很快。最常见的用法是从这个类派生 并重写ProcessRequest和ProcessResponse方法 所以我想带全班同学出去转转,看看感觉如何。我在一件事上被难住了如何结束处理管道并发送响应消息返回? 例如:假设我有一个检查身份验证的处理程序,检查失败,我想

我在WebAPI中偶然发现了
MessageProcessingHandler
类。它是
DelegatingHandler
的孩子。课堂上几乎没有任何信息,MS文档也特别稀薄,只是说:

如果处理程序不需要 异步操作,因为对请求和响应的操作 信息很快。最常见的用法是从这个类派生 并重写
ProcessRequest
ProcessResponse
方法

所以我想带全班同学出去转转,看看感觉如何。我在一件事上被难住了如何结束处理管道并发送
响应消息
返回?


例如:假设我有一个检查身份验证的处理程序,检查失败,我想返回一个HTTP401/403(我不是说哪个,所以我可以避免:-)。使用
MessageProcessingHandler
似乎不可能。是吗?

正如我们可以看到的
消息processinghandler
继承自
DelegatingHandler
,我发现:

首先,我们不能在
HttpMessageHandler
的实现类中实现
sendsync
方法,因为它是密封的。但正如我们从MS文档中看到的,如果我们实现一个
DelegatingHandler
,我们可以跳过内部处理程序,直接在
SendAsync
覆盖方法中创建响应

其次,
ProcessRequest
方法将
HttpRequestMessage
作为输入并返回
HttpRequestMessage
,它不会返回
HttpResponseMessage
ProcessResponse
do返回响应,但它将在操作完成执行后执行

最后,
MessageProcessingHandler
class注释说:

处理程序的基类型,只对 请求和/或响应消息


因此答案很明显,
ProcessRequest
不发送
ResponseMessage
返回,只做一些小的处理。顺便说一句,有些人也在这里登录并返回原始请求

GlobalConfiguration.Configuration.MessageHandler.Add(新建YourMessageHandler())
global.asax
为meDid工作评论回答为您工作?