gpt4 book ai didi

c# - 如何将委派处理程序限制为 Web API 中的特定路由?

转载 作者:可可西里 更新时间:2023-11-01 09:10:08 25 4
gpt4 key购买 nike

我有一个自定义委托(delegate)处理程序来管理请求的身份验证。在我的一个 Controller 中,不应为特定操作启用身份验证。如何禁用方法和路由的委托(delegate)处理程序 POST api/MyController

一种选择是在处理程序中对路由进行硬编码,但是,我宁愿将此逻辑保留在处理程序之外。此外,我看到自己将此行为添加到更多操作中,这会使此方法难以维护。

protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Post
&& request.RequestUri.PathAndQuery.StartsWith("/api/MyController"))
return base.SendAsync(request, cancellationToken);

// Do authentication
}

有没有更好更容易维护的方法?

最佳答案

映射路由时,有一个重载 MappHttpRoute允许您指定 HttpMessageHandler。您可以将您的处理程序添加到所有需要它的路由,并为不应使用它的路由省略它。
有关详细信息,请参阅此 link .以下示例取自该资源:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "Route1",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);

config.Routes.MapHttpRoute(
name: "Route2",
routeTemplate: "api2/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new MessageHandler2() // per-route message handler
);

config.MessageHandlers.Add(new MessageHandler1()); // global message handler
}
}

关于c# - 如何将委派处理程序限制为 Web API 中的特定路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com