9

Я создал новый проект Web Api, добавлена ​​Asp.Net Идентичность и сконфигурированный OAuth так:Как показать WebAPI OAuth маркер конечной точки в Swagger

OAuthOptions = new OAuthAuthorizationServerOptions 
{ 
    TokenEndpointPath = new PathString("/Token"), 
    Provider = new ApplicationOAuthProvider(PublicClientId), 
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
    AllowInsecureHttp = true 
}; 

Это все работает отлично, я могу назвать/Конечная точка маркера и вернуть токер-носитель.

Проблема в том, что это невозможно обнаружить в Swagger. Я предполагаю, что он не находится на контроллере и поэтому не имеет XML-документации, сгенерированной для него.

Кто-нибудь знает способ отображения этой конечной точки входа в моих документах Swagger?

Спасибо.

Кроме того, я должен был сказать, что документация Swagger работает со всеми моими контроллерами, просто я пропустил этот один очевидный метод - как войти в систему.

+0

Я не знаю, если это [ссылка] (http://bitoftech.net/2014/08/25/asp-net-web-api -documentation-using-swagger /) поможет или нет, но также объяснит, как создать XML, если его нет. – KhawajaAtteeq

+0

Спасибо, это на самом деле одна из статей, которые я использовал для настройки Swagger. – Russ

+0

Вы упомянули Swashbuckle в своих тегах, просмотрели ли вы раздел «Описывая безопасность/авторизацию» в https://github.com/domaindrivendev/Swashbuckle/blob/master/README.md? –

ответ

11

ApiExplorer не будет автоматически генерировать информацию для вашей конечной точки, поэтому вам нужно будет добавить собственный DocumentFilter, чтобы вручную описать конечную точку маркера.

Там пример этого в https://github.com/domaindrivendev/Swashbuckle/issues/332:

class AuthTokenOperation : IDocumentFilter 
{ 
    public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) 
    { 
     swaggerDoc.paths.Add("/auth/token", new PathItem 
     { 
      post = new Operation 
      { 
       tags = new List<string> { "Auth" }, 
       consumes = new List<string> 
       { 
        "application/x-www-form-urlencoded" 
       }, 
       parameters = new List<Parameter> { 
        new Parameter 
        { 
         type = "string", 
         name = "grant_type", 
         required = true, 
         @in = "formData" 
        }, 
        new Parameter 
        { 
         type = "string", 
         name = "username", 
         required = false, 
         @in = "formData" 
        }, 
        new Parameter 
        { 
         type = "string", 
         name = "password", 
         required = false, 
         @in = "formData" 
        } 
       } 
      } 
     }); 
    } 
} 

httpConfig.EnableSwagger(c => 
{ 
    c.DocumentFilter<AuthTokenOperation>(); 
}); 
+0

именно то, что мне нужно, спасибо – Russ

+1

где нам нужно поставить этот класс, чтобы генератор HelpPage создал правильный html? – EeKay

+1

@EeKay: скорее всего, в вашем SwaggerConfig.cs - это последняя часть в примере кода выше (httpConfig.EnableSwagger (...)) – Efrain