【问题标题】:WebAPI function invoked before controller action在控制器操作之前调用的 WebAPI 函数
【发布时间】:2013-08-21 16:40:05
【问题描述】:

我正在使用 Microsoft ASP.NET Web API 开发 RESTful 服务。

我需要的是某种处理函数,在每次调用服务时触发,在我的流程进入控制器方法之前。

假设我可以调用我的数据库并检查请求标头中提供的哈希令牌是否有权通过 API 检索数据,然后如果有,则继续使用控制器方法。

在 WebAPI 中是否有我需要的可编程位置?我对 Web API 数据流不是很熟悉。

【问题讨论】:

    标签: c# asp.net rest asp.net-web-api


    【解决方案1】:

    我需要的是某种处理函数,即 每次调用服务时触发,在我的流程进入之前 进入控制器方法。

    你可以写一个custom message handler。例如MSDN文章中所示:

    public class ApiKeyHandler : DelegatingHandler
    {
        public string Key { get; set; }
    
        public ApiKeyHandler(string key)
        {
            this.Key = key;
        }
    
        protected override Task<HttpResponseMessage> SendAsync(
            HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (!ValidateKey(request))
            {
                var response = new HttpResponseMessage(HttpStatusCode.Forbidden);
                var tsc = new TaskCompletionSource<HttpResponseMessage>();
                tsc.SetResult(response);    
                return tsc.Task;
            }
            return base.SendAsync(request, cancellationToken);
        }
    
        private bool ValidateKey(HttpRequestMessage message)
        {
            var query = message.RequestUri.ParseQueryString();
            string key = query["key"];
            return (key == Key);
        }
    }
    

    【讨论】:

    • 是的,似乎委派处理程序适合。谢谢。
    【解决方案2】:

    另一种方法是创建自己的实现IDispatchMessageInspector的类

    More Info Here

    如果请求对象中没有标头,我会将您的授权检查添加到 afterRecieveRequest 并引发异常(可能是 http 403)。

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 2017-05-13
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      相关资源
      最近更新 更多