如何为自定义路由定义一个DelegatingHandler

本文关键字:一个 DelegatingHandler 定义 自定义 路由 | 更新日期: 2023-09-27 17:54:54

我已经创建了一个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()})
);

我的类Controller and method有以下属性:

[RoutePrefix("api/message")]
public class MessageController : ApiController
{
    [Route("{type}")]
    [HttpPost]
    public HttpResponseMessage Save(string type, [FromBody] Message message)
    {
        ....
    }
}

我的处理程序缺少什么只适用于请求,如api/message/text?

我读过链接,如如何为MVC 4 Api和http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection制作更多的MapHttpRoutes。

如何为自定义路由定义一个DelegatingHandler

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

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