• Stars
    star
    6,405
  • Rank 5,919 (Top 0.2 %)
  • Language
    C#
  • License
    MIT License
  • Created over 8 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript.

NSwag: The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript

NSwag | NJsonSchema | Apimundo | Namotion.Reflection

NuGet Version npm NuGet Version Preview build Discord StackOverflow Wiki Backers on Open Collective Sponsors on Open Collective

πŸ‘‰ Announcing Apimundo: An API documentation system based on NSwag and NJsonSchema πŸ‘ˆ

NSwag is a Swagger/OpenAPI 2.0 and 3.0 toolchain for .NET, .NET Core, Web API, ASP.NET Core, TypeScript (jQuery, AngularJS, Angular 2+, Aurelia, KnockoutJS and more) and other platforms, written in C#. The OpenAPI/Swagger specification uses JSON and JSON Schema to describe a RESTful web API. The NSwag project provides tools to generate OpenAPI specifications from existing ASP.NET Web API controllers and client code from these OpenAPI specifications.

The project combines the functionality of Swashbuckle (OpenAPI/Swagger generation) and AutoRest (client generation) in one toolchain (these two libs are not needed). This way a lot of incompatibilites can be avoided and features which are not well described by the OpenAPI specification or JSON Schema are better supported (e.g. inheritance, enum and reference handling). The NSwag project heavily uses NJsonSchema for .NET for JSON Schema handling and C#/TypeScript class/interface generation.

ToolchainDiagram

The project is developed and maintained by Rico Suter and other contributors.

Features

Ways to use the toolchain

Tutorials

OpenAPI/Swagger Generators

Code Generators

  • CSharp Client
    • CSharpClientGenerator
      • Generates C# clients from an OpenAPI specification
      • Generates POCOs or classes implementing INotifyPropertyChanged supporting DTOs
      • The generated clients can be used with full .NET, .NET Core, Xamarin and .NET Standard 1.4 in general
  • CSharp Controllers (contract first/schema first development)
    • CSharpControllerGenerator
      • Generates Web API Controllers based on an OpenAPI specification (ASP.NET Web API and ASP.NET Core)
  • TypeScript Client
    • TypeScriptClientGenerator
      • Generates TypeScript clients from an OpenAPI specification
      • Available templates/supported libraries:
        • JQuery with Callbacks, JQueryCallbacks
        • JQuery with promises JQueryPromises
        • AngularJS using $http, AngularJS
        • Angular (v2+) using the http service, Angular
        • window.fetch API and ES6 promises, Fetch (use this template in your React/Redux app)
        • Aurelia using the HttpClient from aurelia-fetch-client, Aurelia (based on the Fetch template)
        • Axios (preview)

Downloads

NPM Packages

  • NSwag: Command line tools (.NET and .NET Core) distributed as NPM package

NuGet Packages

Specification

  • NSwag.Core
    • The OpenAPI/Swagger reader and writer classes, see OpenApiDocument (.NET Standard 1.0 / 2.0 and .NET 4.5)
  • NSwag.Core.Yaml (.NET Standard 1.3 / 2.0 and .NET 4.5)
    • Extensions to read and write YAML OpenAPI specifications
  • NSwag.Annotations (.NET Standard 1.0 / 2.0 and .NET 4.5)
    • Attributes to decorate Web API controllers to control the OpenAPI generation

OpenAPI generation

Code generation

ASP.NET and ASP.NET Core

Frontends

  • NSwag.AssemblyLoader (.NET Standard 1.6 / 2.0 and .NET 4.5.1):
    • Classes to load assemblies in an isolated AppDomain and generate OpenAPI specs from Web API controllers
  • NSwag.Commands (.NET Standard 1.6 / 2.0 and .NET 4.5.1+):
    • Commands for the command line tool implementations and UI
  • NSwag.MSBuild (MSBuild .targets):
    • Adds a .targets file to your Visual Studio project, so that you can run the NSwag command line tool in an MSBuild target, see MSBuild
  • NSwag.ConsoleCore (.NET Core 1.0, 1.1, 2.0, 2.1 and 2.2):
    • Command line tool for .NET Core (dotnet nswag)
    • <DotNetCliToolReference Include="NSwag.ConsoleCore" Version="..." />
  • NSwagStudio (Chocolatey, Windows):
    • Package to install the NSwagStudio and command line tools via Chocolatey

CI NuGet Feed

https://www.myget.org/F/nswag/api/v3/index.json

The NuGet packages may require the Microsoft.NETCore.Portable.Compatibility package on .NET Core/UWP targets (if mscorlib is missing).

LayerDiagram

Usage in C#

To register the middlewares to generate an OpenAPI spec and render the UI, register NSwag in Startup.cs:

public class Startup
{
    ...

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOpenApiDocument(); // add OpenAPI v3 document
//      services.AddSwaggerDocument(); // add Swagger v2 document
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        ...

        app.UseOpenApi(); // serve OpenAPI/Swagger documents
        app.UseSwaggerUi(); // serve Swagger UI
        app.UseReDoc(); // serve ReDoc UI
    }
}

The following code shows how to read an OpenAPI/Swagger specification and generate C# client classes to call the described web services:

var document = await OpenApiDocument.FromFileAsync("openapi.json");
var clientSettings = new CSharpClientGeneratorSettings 
{
    ClassName = "MyClass",
    CSharpGeneratorSettings = 
    {
        Namespace = "MyNamespace"
    }
};

var clientGenerator = new CSharpClientGenerator(document, clientSettings);
var code = clientGenerator.GenerateFile();

Check out the project Wiki for more information.

NSwagStudio

The generators can be used in a comfortable and simple Windows GUI called NSwagStudio:

Sponsors, support and consulting

Companies or individuals which paid a substantial amount for implementing, fixing issues, support or sponsoring are listed below. Thank you for supporting this project! You can also become a financial contributor:

Please contact Rico Suter for paid consulting and support.

Contributors

This project exists thanks to all the people who contribute. [Contribute].

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website.

Top sponsors:

Sponsors:

Backers

Thank you to all our backers!

More Repositories

1

NJsonSchema

JSON Schema reader, generator and validator for .NET
C#
1,290
star
2

DNT

DNT (DotNetTools): Command line tools to manage .NET projects and solutions.
C#
380
star
3

MyToolkit

MyToolkit for .NET
C#
332
star
4

VisualJsonEditor

A JSON schema based file editor for Windows.
C#
329
star
5

NuGetReferenceSwitcher

Visual Studio extension to switch between NuGet and project references.
C#
204
star
6

Namotion.Reflection

.NET library with advanced reflection APIs.
C#
187
star
7

SigSpec

Specification and code generator for SignalR Core.
C#
153
star
8

ProjectDependencyBrowser

Application to browse, sort, filter and launch your Visual Studio projects.
C#
46
star
9

Namotion.Messaging

.NET abstractions and implementations for message brokers, event queues and data ingestion services.
C#
45
star
10

Namotion.Storage

.NET abstractions and implementations for storage services like blob storages, file systems or object storages.
C#
35
star
11

PowerCmd

PowerCmd: The Windows Prompt replacement.
C#
33
star
12

NConsole

NConsole is a .NET library to parse command line arguments and execute commands.
C#
31
star
13

DotNetMicroservice

C#
11
star
14

HomeBlaze

Home Automation with .NET/Blazor
C#
9
star
15

InsideAsyncAwait

C#
8
star
16

aurelia-bs

Bootstrap UI (CSS framework) components for Aurelia JS.
TypeScript
7
star
17

ShopOnCore

C#
7
star
18

AureliaBootstrapDialogs

JavaScript
6
star
19

SampleOutputProcessorActionFilter

Sample application for a blog article.
C#
5
star
20

ScopeCheckingNinjectKernel

C#
3
star
21

DockerDemo

ASP.NET Core with Docker sample and tutorial
C#
3
star
22

SampleWcfService

Sample application for a blog article.
C#
3
star
23

VistoJS

Visto JavaScript Framework (VistoJS)
TypeScript
2
star
24

SampleSortableChildCollectionForm

Sample ASP.NET MVC application with edit form for an entity with a collection property.
CSS
2
star
25

SampleEfMigrationsApplication

C#
2
star
26

RicoSuter

1
star
27

SampleProjectRepository

Sample projects for package and dependency management tests.
C#
1
star
28

MdFileWiki

C#
1
star