2

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

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

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

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

4

2 回答 2

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);
    }
}
于 2013-08-21T16:42:55.147 回答
0

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

更多信息在这里

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

于 2013-08-21T17:00:37.813 回答