Need help with dotnet-serve?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

natemcmaster
465 Stars 43 Forks Apache License 2.0 151 Commits 2 Opened issues

Description

Simple command-line HTTPS server for the .NET Core CLI

Services available

!
?

Need anything else?

Contributors list

# 8,855
C#
Shell
lets-en...
entity-...
108 commits
# 49,944
C#
xamarin...
curses
cil
3 commits
# 545,730
Shell
HTML
JavaScr...
dotnet-...
2 commits
# 44,256
C#
owin
dotnet-...
.NET
2 commits
# 159,347
C#
odata
owin
Univers...
1 commit
# 41,969
mediato...
color-s...
Less
F#
1 commit
# 1,792
C#
aspnet-...
dotnet-...
aspnetc...
1 commit
# 76,822
TypeScr...
entity-...
net-sta...
prometh...
1 commit
# 23,824
xquery
.NET
F#
clr
1 commit
# 208,145
Shell
C#
.NET
calenda...
1 commit
# 142,157
F#
demosce...
vscode
blazor
1 commit
# 166,387
Yii Fra...
Twitter
faceboo...
yii2
1 commit

dotnet-serve

Build Status Code Coverage NuGet NuGet Downloads

A simple command-line HTTP server.

It launches a server in the current working directory and serves all files in it.

Get started

Install .NET Core or .NET 5+ and run this command:

dotnet tool install --global dotnet-serve

Start a simple server and open the browser by running

dotnet serve -o

..and with HTTPS.

dotnet serve -o -S

Usage

Usage: dotnet serve [options]

Options: --version Show version information -d|--directory

The root directory to serve. [Current directory] -o|--open-browser Open a web browser when the server starts. [false] -p|--port Port to use [8080]. Use 0 for a dynamic port. -a|--address
Address to use [127.0.0.1] --path-base The base URL path of postpended to the site url. --default-extensions[:] A comma-delimited list of extensions to use when no extension is provided in the URL. [.html,.htm] -q|--quiet Show less console output. -v|--verbose Show more console output. -h|--headers A header to return with all file/directory responses. e.g. -h "X-XSS-Protection: 1; mode=block" -S|--tls Enable TLS (HTTPS) --cert A PEM encoded certificate file to use for HTTPS connections. Defaults to file in current directory named 'cert.pem' --key A PEM encoded private key to use for HTTPS connections. Defaults to file in current directory named 'private.key' --pfx A PKCS#12 certificate file to use for HTTPS connections. Defaults to file in current directory named 'cert.pfx' --pfx-pwd The password to open the certificate file. (Optional) -m|--mime Add a mapping from file extension to MIME type. Empty MIME removes a mapping. Expected format is =. -z|--gzip Enable gzip compression -b|--brotli Enable brotli compression (requires .NET Core 3+) -c|--cors Enable CORS (It will enable CORS for all origin and all methods) --save-options Save specified options to .netconfig for subsequent runs. -?|--help Show help information

Tip: single letters for options can be combined. Example:

dotnet serve -Sozq

Configuring HTTPS

dotnet serve -S
will serve requests over HTTPS. By default, it will attempt to find an appropriate certificate on the machine.

By default,

dotnet serve
will look for, in order: - A pair of files named
cert.pem
and
private.key
in the current directory - A file named
cert.pfx
in the current directory - The ASP.NET Core Developer Certificate (localhost only)

You can also manually specify certificates as command line options (see below):

See also this doc for how to create a self-signed HTTPS certificate.

.pem files

Use this when you have your certficate and private key stored in separate files (PEM encoded).

dotnet serve --cert ./cert.pem --key ./private.pem

Note: currently only RSA private keys are supported.

.pfx file

You can generate a self-signed

Use this when you have your certficate as a .pfx/.p12 file (PKCS#12 format).

dotnet serve --pfx myCert.pfx --pfx-pwd certPass123

Using the ASP.NET Core Developer Certificate

The developer certificate is automatically created the first time you use

dotnet
. When serving on 'localhost', dotnet-serve will discover and use when you run:
dotnet serve -S

Reusing options with .netconfig

dotnet-serve
supports reading and saving options using dotnet-config, which provides hierarchical inherited configuration for any .NET tool. This means you can save your frequently used options to
.netconfig
so you don't need to specify them every time and for every folder you serve across your machine.

To save the options used in a particular run to the current directory's

.netconfig
, just append
--save-options
:
dotnet serve -p 8080 --gzip --cors --quiet --save-options

After running that command, a new

.netconfig
will be created (if there isn't one already there) with the following section for
dotnet-serve
:
[serve]
    port = 8000
    quiet
    gzip
    cors
    header = X-My-Option: foo
    header = X-Another: bar

(note multiple

header
,
mime
type mappings and
exclude-file
entries can be provided as individual variables)

You can place those settings in any parent folder and it will be reused across all descendent folders, or they can also be saved to the global (user profile) or system locations. To easily configure these options at those levels, use the

dotnet-config
tool itself:
dotnet config --global --set serve.port 8000

This will default the port to

8000
whenever a port is not specified in the command line. You can open the saved
.netconfig
at
%USERPROFILE%\.netconfig
or
~/.netconfig
.

The

cert
,
key
and
pfx
values, in particular, can be relative paths that are resolved relative to the location of the declaring
.netconfig
file, which can be very convenient.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.