gpt4 book ai didi

c# - web api 2.0 过滤器实现 customFilter 的最佳选择

转载 作者:可可西里 更新时间:2023-11-01 16:32:12 25 4
gpt4 key购买 nike

我在我的应用程序的服务器端使用 web api 2.0c#

我想创建一个自定义过滤器(我猜是自动化过滤器)来仅授权来自允许的推荐人(我定义的)的发布/放置请求并阻止所有其他请求。

编辑:解释更多:我需要一个很好的方法来查看 Request.Header.Referrer 是否存在于我预定义为允许请求的引用列表中,否则我会阻止它并且不会授权方法执行

我是否使用 AuthorizationFilter?为什么?如何?还是我需要其他类型的过滤器,如 OperationFilter 或其他?

如果你可以另外向我解释一下是什么让我选择使用这种类型的过滤器而不是其他过滤器的主要区别......

我在谷歌中搜索了它,但我发现的是详细的非常大的实现,但我仍然看不出最流行(使用)的过滤器类型与我们做出选择的原因之间的区别。

提前致谢

编辑:我尝试实现 CORS,但问题是 CORS 不会像此 post 中提到的那样合并请求... 给出的解决方案对于像我这样的简单需求来说太多了

最佳答案

您可以使用自定义 HttpHandlers 来处理识别传入请求的类型。您可以从 System.Net.Http.DelegatingHandler 派生并覆盖 SendAsync 方法,如下所示

public class RequestFilterHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
Task<HttpResponseMessage> responseTask;
if (IsAuthorizedPostOrPutCall(request))
{
responseTask = base.SendAsync(request, cancellationToken).ContinueWith(task => task.Result);
}
else
{
responseTask = new Task<HttpResponseMessage>(() => new HttpResponseMessage(HttpStatusCode.Unauthorized));
responseTask.Start()
}
return reponseTask;
}
private bool IsAuthorizedPostOrPutCall(HttpRequestMessage request)
{
var referrerList = //Assumption:Predefined list you get through a service
return referrerList.Contains(request.Headers.Referrer) && ( request.Method == HttpMethod.Post || request.Method == HttpMethod.Put);
}
}

在您的 Global.asax.cs 中:

 GlobalConfiguration.Configuration.MessageHandlers.Add(new RequestFilterHandler());

关于c# - web api 2.0 过滤器实现 customFilter 的最佳选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44777162/

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