jquery - 将授权 header 中的 api key 发送到 REST Web API

标签 jquery asp.net-mvc asp.net-web-api asp.net-mvc-routing

我有一个 REST Web API,它接收一些 apiKeyGET 的示例此 Web API 的操作是:

public HttpResponseMessage Get(int id, string apiKey)

我的 Web API 中定义的唯一路由是:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

现在,有一个使用此 Web API 的 Web 客户端,它发送 apiKey在执行 GET 时的查询字符串中请求。

据我了解,最好发送apiKey在请求的授权 header 中。

有人可以告诉我如何做 GET请求并输入 apiKey在授权 header 中,并且仍然落在正确的操作方法中(我的意思是上面的 Get 方法)?

最佳答案

您可以欺骗 Web api,使其认为授权 header 是来自带有小消息处理程序的查询字符串的参数。

 public class ApiKeyHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var routeData = request.GetRouteData();

            if (request.Headers.Authorization != null && !routeData.Values.ContainsKey("apikey"))
            {
                routeData.Values.Add("apikey",request.Headers.Authorization.Parameter);
            }
            return base.SendAsync(request, cancellationToken);
        }
    }

此处理程序将获取从 URI 中提取的路由数据,如果您传递授权 header ,它将获取参数值并将其设置为 apikey 路由参数。

授权 header 需要类似于

Authorization: apikey 12323434234234234

您可以通过将此链接添加到 WebApiConfig.Register 方法中来安装消息处理程序。

config.MessageHandlers.Add(new ApiKeyHandler());

顺便说一句,您可以使用这样的处理程序来实际验证 ApiKey。这样,您实际上不需要将 apikey 传递给您的操作方法。如果 ApiKey 不好,只需直接从处理程序返回 401。

关于jquery - 将授权 header 中的 api key 发送到 REST Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21868354/

相关文章:

asp.net-mvc - 如何将 ID 作为 GET 函数的参数从 View 传递到 ViewModel?

javascript - 如何使用 ASP.NET MVC 显示基于单选按钮的内容?

c# - 从 Azure AD 检索 RBAC 的用户组成员身份

jquery - 多个自动完成功能不起作用

jquery - 覆盖由 jQuery 主题滚轮设置的表格宽度

javascript - 调整图片大小,需要一个好的库

javascript - jQuery - 使用发布数据重定向

asp.net - 在上传到 Azure Blob 存储之前调整图像大小

asp.net-mvc - Azure 可扩展环境中的 WebSocket

asp.net - HTTP header Access-Control-Allow-Origin 中是否存在允许来源的最大数量?