servicestack,swagger,C#,Rest,servicestack,Swagger" /> servicestack,swagger,C#,Rest,servicestack,Swagger" />

C# 什么是';api#U键';我如何正确使用它

C# 什么是';api#U键';我如何正确使用它,c#,rest,servicestack,swagger,C#,Rest,servicestack,Swagger,我是restful服务的新手,我刚刚实现了测试代码,以使ServiceStack restful服务与Swagger插件一起工作,这就引出了我的问题 在swagger ui/index.html中有一个“api_key”字段。我知道变量名是umm。。。变量,我也可以随意设置,但我有点困惑它的用途,以及我是否应该使用它 此外,如果我使用它,servicestack如何在服务器端向我呈现该值 这是我从文档中建立并运行的测试服务 [Api("Hello Web Services")]

我是restful服务的新手,我刚刚实现了测试代码,以使ServiceStack restful服务与Swagger插件一起工作,这就引出了我的问题

在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 };
        }
    }

Swagger UI的一般概念是提供一个
api\u键
,用于发送到服务的每个请求。它可以作为查询字符串或标题值发送,您还可以按照上面的链接中所述更改参数的名称

仅当您在ServiceStack服务中确实需要API密钥时(例如,如果您有一个检查和验证API密钥的请求筛选器),才需要配置此项


您可能需要在JavaScript代码中配置默认API键值来设置Swagger,而不是在API键值中设置用户类型的原因是,一旦加载index.html页面,它将向您的服务发送多个请求以检索元数据,因此,在用户开始交互之前,它想知道默认情况下为这些元数据请求发送什么API键值。

要回答我自己对Esker的后续请求,下面是如何使用API键值

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内部)

我在这个问题的答案中发现


与您的问题无关,但请注意,您可以让Hello类实现该接口,以使您的服务更加自我记录,并使使用ServiceStack更加容易:
类Hello:IReturn…
谢谢@esker,您是否可以添加一些代码来说明如何典型地访问我在
Any(Hello请求)
中使用的“api\u密钥”。
   $(function () {
        $.ajaxSetup({
            beforeSend: function (jqXHR, settings) {
                jqXHR.setRequestHeader("api_key", $("#input_apiKey").val());
            }
        });
    });