【发布时间】:2014-01-16 16:44:26
【问题描述】:
我有一个自定义委托处理程序来管理请求的身份验证。在我的一个控制器中,不应为特定操作启用身份验证。如何禁用 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
}
有没有更好更容易维护的方法?
【问题讨论】:
-
并非如此。 MessageHandler 旨在将其行为一致地应用于所有请求。没有简单的解决方案应用全局动作过滤器然后有选择地删除它们。
标签: c# authentication asp.net-web-api