什么是'api_key'以及如何正确使用它

时间:2013-08-13 09:17:55

标签: c# rest servicestack swagger

我对宁静的服务很新,而且我刚刚实现了测试代码,以便在Swagger插件工作的同时获得ServiceStack休息服务,这引出了我的问题...

在swagger-ui / index.html里面有一个'api_key'字段。我知道变量名是umm ...变量,我也可以设置它,无论我喜欢什么,但我有点困惑它用于什么以及我是否应该使用它。

另外,如果我使用它,servicestack如何在服务器端向我显示该值?

这是测试服务我从文档中启动并运行...

    [Api("Hello Web Services")]    
    [Route("/Hello", Summary = @"Noel's ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes")]
    [Route("/Hello/{name}",   Summary = @"N031'5 ServiceStackSwagger thingy", Notes = "Some more info in here cause these are notes", Verbs="GET,POST" )] 
    public class Hello
    {
        [ApiMember(Name = "Name", Description = "This is a description", ParameterType = "path", DataType = "string", Verb="GET,POST")]
        public string Name { get; set; }
    }

    public class HelloResponse
    {
        public string Result { get; set; }
    }


    public class HelloService : Service
    {
        public object Any(Hello request)
        {
            return new HelloResponse { Result = "Hello, " + request.Name };
        }
    }

2 个答案:

答案 0 :(得分:4)

回答我自己的Esker跟进请求,这里是如何使用API​​ Key的东西......

public class HelloService : Service
{        
    public object Any(Hello request)        
    {
        string api_key = this.Request.Headers["api_key"];            
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
} 

但还需要一些额外的javascript将它包含在标题中(如swagger-ui / index.html内)......

   $(function () {
        $.ajaxSetup({
            beforeSend: function (jqXHR, settings) {
                jqXHR.setRequestHeader("api_key", $("#input_apiKey").val());
            }
        });
    });

我在这个问题的答案中找到了......

How to get Swagger to send API key as a http instead of in the URL

答案 1 :(得分:3)

Swagger UI的一般概念是在发送给您的服务documented here的每个请求中提供api_key。它可以作为查询字符串或标题值发送,您也可以更改参数的名称,如上面的链接所述。

如果您确实在ServiceStack服务中需要API密钥,则只需配置此项(例如,如果您有一个请求过滤器,可能会检查并验证API密钥)。

您可能需要在JavaScript代码中配置默认​​API密钥值以设置Swagger而不是让用户键入API密钥的原因是,只要index.html页面加载,它就会发送多个请求您的服务用于检索元数据,因此它希望知道在用户开始交互之前默认为这些元数据请求发送的API密钥值。