C# 如何定义自定义路由的DelegatingHandler?

C# 如何定义自定义路由的DelegatingHandler?,c#,delegatinghandler,C#,Delegatinghandler,我已经创建了一个DelegatingHandler,它可以处理每个请求。我读过一些文章,我可以为一个特定的路由定义一个处理程序,但是我尝试了很多方法都没有成功,我错过了一些我没有找到的东西 最后一次尝试是: GlobalConfiguration.Configuration.Routes.MapHttpRoute( name: "SaveMessage", routeTemplate: "api/message/{type}", defaults: new { type

我已经创建了一个DelegatingHandler,它可以处理每个请求。我读过一些文章,我可以为一个特定的路由定义一个处理程序,但是我尝试了很多方法都没有成功,我错过了一些我没有找到的东西

最后一次尝试是:

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
    name: "SaveMessage",
    routeTemplate: "api/message/{type}",
    defaults: new { type = RouteParameter.Optional },
    constraints: null,
    handler: HttpClientFactory.CreatePipeline(
              new HttpControllerDispatcher(GlobalConfiguration.Configuration), 
              new DelegatingHandler[]{new ValidationHandler()})
);
我的类控制器和方法具有以下属性:

[RoutePrefix("api/message")]
public class MessageController : ApiController
{
    [Route("{type}")]
    [HttpPost]
    public HttpResponseMessage Save(string type, [FromBody] Message message)
    {
        ....
    }
}
我的处理程序缺少的内容仅适用于api/message/text等请求


我读过像和这样的链接。

问题在于设置为null的约束。 您应该这样定义它,以使其适用于POST或GET:

constraints: new { httpMethod = new System.Web.Http.Routing.HttpMethodConstraint(HttpMethod.Post) }

那么你是说你的delegatingHandler在api/消息/文本路由上工作?我认为您已将处理程序添加到该路由,因此它应该是这样工作的..不,只有在执行类似GlobalConfiguration.Configuration.MessageHandlers.Add(new ValidationHandler())的操作时,它才会工作但是每个请求都会命中处理程序,我只希望请求api/message/text命中处理程序。如果我有api/message/text?token=XXXX这样的查询字符串,我应该将其添加到路由配置中吗?不,查询字符串不是路由的一部分。这是我的浏览器提交的内容“”。我也尝试添加IntegrationApi,但没有成功。