►
From YouTube: S104 - What's New in ASP.NET Core?
Description
Let's dive into what's new in ASP.NET Core! In this session we'll take a look at the new features in the latest ASP.NET Core preview, including improved support for building descriptive Web APIs, HTTP/2, a new in-process IIS hosting, support for health checks, and much more!
A
A
2
is
now
available
for
you
to
download
to
install
and
to
try
out
in
this
session,
I'm
going
to
talk
about
many
of
the
new
features
that
are
now
available
with
this
preview
release
and
I'll
also
talk
about
some
of
the
additional
investments
that
we're
planning
to
make
for
the
final
2.2
release
to
get
started
with
asp.net
core
2.2
preview.
You're
gonna
want
to
go
in
download
and
install
the
latest
dotnet
core
SDK,
the
2.2
preview,
2
SDK.
You
can
get
that
from
the
dotnet
website
and
install
the
preview
2
version.
A
If
you
want
our
on
Windows
and
you're,
using
Visual
Studio
you're
gonna
want
to
get
the
latest
preview
release
version
of
Visual
Studio
2017.
That
would
be
15.9
preview
2.
You
can
get
that
from
Visual
Studio
comm,
slash
preview
or
also,
if
you
already
have
the
preview
channel
installed,
you
can
just
update
to
the
latest
release.
Now
all
of
these
installations
are
side
by
side
installations
with
existing
stable
releases.
I
have
on
my
machine,
multiple,
stable
and
pre-release
versions
of
the.net,
core
SDK.
A
Well
I've
had
like
two
different
preview
releases
and
the
staple
release
of
Visual
Studio.
They
all
work
great
side
by
side,
so
you
can
install
them
without
fear
that
they
will
have
any
impact
on
your
development
workflow.
So
let
me
show
you
quickly
how
to
go
and
do
that.
So,
let's
just
hop
over
to
a
browser
real
fast
to
get
the
2.2
SDK
you're
going
to
want
to
go
to
dotnet
and
then
go
to
the
downloads
page.
A
A
Gonna
want
to
install
the
SDK
for
your
platform
and
architecture
of
choice
and
then
after
you've
done
that,
if
you
also
want
to
deploy
to
that
2
applications
to
an
IAS
based
environment,
you're,
probably
also
going
to
want
to
go
over
here
and
install
the
runtime
and
hosting
bundle
once
you've
installed
the
SDK.
You
should
be
able
to
verify
that
things
are
all
set
up
and
working
by
going
to
the
command,
prompt
and
typing
net
version.
You
should
see
a
2.2
version
of
the
SDK
for
preview.
A
If
actually,
if
I
run
net
info,
you
can
see
that
I've
got
lots
of
SDKs
installed.
So,
like
I
said,
these
things
are
all
side
by
side
and
they
work
great
together.
The
uninstall
cleanly
now,
if
you're,
using
Visual,
Studio
you're
going
to
want
to
go
to
visual
studio,
comm,
slash
preview
and
install
the
preview
channel
of
Visual
Studio
to
use
these
bits.
If
you
already
have
the
preview
channel
just
make
sure
you
update
so
that
you're
on
15.9
preview.
A
Okay,
so
let's
create
our
first
application,
so
I'm
gonna,
clear
the
command
prompt
here
a
little
bit
and
let's
do
dotnet
new
I'm
gonna
create
a
new
web
app
and,
let's
put
it
in
the
web,
app
one
directory,
and
what
this
will
do.
This
will
create
me
a
new
asp.net,
core
2.2
application
and
just
put
it
on
my
desktop
that
will
work
on
Windows,
Mac
or
Linux
or
whatever
platform
you
happen
to
be
working
on.
A
If
you're
in
Visual
Studio,
you
can
just
open
up
visual
studio
file
in
your
project
and
if
you
go
to
create
an
a
spin
in
the
core
asp.net
core
web
application
click
OK
in
the
new
asp.net
core
web
app
dialog.
You
should
see
that
a
spinet
core
2
got
to
is
now
available
for
you
to
to
use,
go
ahead
and
pick
the
default
web
application,
template
and
you're
good
to
go.
A
So
that's
how
you
can
create
your
first
application
now
in
the
project
templates
for
this
release,
we've
made
a
bunch
of
tweaks
in
particular
for
the
default
templates.
If
we
look
up
the
layout,
you
can
see
that
we
are
now
using.
Let's
see
we
can
find
it
there,
it
is
bootstrap
4,
so
our
templates
are
now
bootstrap
4
based,
so
you
get
a
nice
fresh
new
eye
and
in
fact
we
took
this
opportunity
to
go
through
the
the
template
content,
simplify
things
a
bit
and
give
us
sort
of
a
fresher
look.
A
So
if
I
run
this
application,
you
can
see
that
what
the
new
template
looks
like
we've
basically
tried
to
remove
all
the
extra
code
and
content
that
you
don't
really
need
so
there's
less
stuff
for
you
to
delete
when
you're
trying
to
get
up
and
going
with
your
application-
and
this
is
what
it
looks
like.
So
that's
the
new
template.
It's
based
on
bootstrap
for
a
lot
more
minimalistic.
We
hope
you
like
it.
A
Let
us
know
what
you
think
on
github
other
things
that
we've
also
done
if
you're
working
with
spa
frameworks
like
angular
or
react,
if
you
go
to
create
a
angular
application
I'll,
do
that
one
real,
quick
as
well!
We've
tried,
we've
updated
all
the
client-side
frameworks
as
well,
so
the
angular
application
is
now
based
on.
Let's
see
if
we
go
into
the
client
app
folder
packages
Jason,
you
can
see
now
it's
based
on
angular,
6,
I,
believe
angular
6.1
has
also
recently
come
out.
These
frameworks
move
pretty
fast
as
much
as
possible.
A
We
will
continue
to
update
update
these
templates
to
use
the
latest
versions
of
the
client-side
frameworks,
but
for
now
you
can
go
ahead
and
use
a
speed
at
a
speed
on
a
core
with
angular
6.
So
that's
how
you
can
get
started
here
are
the
new
features
that
are
included
with
this.
With
the
2.2
release,
we've
already
seen
the
the
support
for
bootstrap,
for
that
includes
bootstrap,
for
support
in
the
templates,
but
also
in
our
scaffolders
and
in
our
default
UI.
A
Now,
if
you're
still
using
bootstrap,
3
you're,
not
quite
ready
to
move
to
bootstrap
for
this
scaffolders
and
the
and
the
default
UI
still
support
bootstrap
3
as
well,
so
you
can
still
scaffold
bootstrap,
3
content.
You
can
still
use
the
bootstrap
3
version
of
the
default
UI
web
api
improvements
is
the
big
theme
for
this
release
for
2.2.
We
really
want
to
make
API
and
service
development
easier
and
better.
We'll
talk
more
in
detail
about
that
in
just
a
second
other
new
features.
A
We've
added
support
for
HTTP
2
into
kestrel
we've
added
an
in
process
hosting
model
for
is
to
have
much
better
performance
and
reliability.
We've
integrated
a
health
checks
framework
into
asp.net
core
in
this
release,
so
that
you
can
make
sure
that
your
API
is
and
apps
are,
live
and
ready
for
for
traffic.
We've
revised
routing
significantly
in
this
release
into
a
new
routing
system
that
we
call
endpoint
routing,
which
has
much
better
performance
and
also
takes
a
lot
of
the
concerns
that
are
today
handled
in
MVC
and
makes
them
available
much
lower
in
the
stack.
A
So,
for
example,
if
you
want
to
generate
a
link
from
a
middleware,
you
can
now
do
that
in
in
2.2.
And
finally,
we've
added
a
Java
client
for
asp.net
core
signal
are
now
api's
are
everywhere.
Regardless
of
what
type
of
application
you
are
building,
you're,
probably
interacting
with
some
sort
of
back-end,
API
or
service,
and
that
API
or
service
may
in
turn,
be
interacting
with
other
api's.
That
may
be
hosted
in
your
look
data
center
or
they
may
be
hosted
in
the
cloud
in
2.2.
We
want
to
make
API
development
much
better.
A
I'm
gonna
try
and
highlight
the
improvements
that
we're
making
in
2.2
preview,
2
and
then
I'll
also
try
and
point
out
areas
where
we're
still
planning
to
make
additional
investments
in
this
release.
Let's
go
do
that
all
right.
So,
let's
go
back
to
visual
studio
and
let's
create
a
new
project,
and
what
I
want
to
create
here
is
I
want
to
create
a
an
API.
That's
going
to
be
an
API
for
managing
data
about
pets.
It's
gonna
be
a
pet's
API.
So
let's
call
this
pets
API,
so
ever
have
a
pets.
A
Api
project,
let's
see,
looks
good
all
right
and
then
let's
go
ahead
and
use
the
API
template
for
a
specific
asp.net
core
2.2
awesome.
Ok!
So
what
does
this
template?
Give
me
by
default
honestly,
not
much
I
get
this
very
simple
values:
controller,
a
very
simple
API
that
just
well:
it
returns
a
set
of
static
strings
or
an
individual
string,
and
then
the
post
put
and
delete
actions.
Well,
they
don't
do
anything
at
all,
but
at
least
at
least
they're
there.
This
comes.
A
This
API
does
at
least
use
the
new
API
controller
conventions
that
we
introduced
into
that
one.
If
I
run
this
application,
what
will
it
do?
Well
it
build
and
then,
when
it
runs
well,
it
just
uses
the
browser
to
browse
to
one
of
the
API
endpoints
that
browsers
to
slash
values
and
just
returns.
The
Jason,
so
that's
okay,
I
mean
but
with
a
browser.
It's
not
the
best
tool
for
doing
API,
testing
and
debugging
I
mean
it
really
can
only
do
get
requests
by
default.
A
Unless
you
want
to
write
some
code,
maybe
we
can
can
do
better.
So
what
we're
doing
in
in
2.2
is
we're
introducing
a
new
tool
that
we
call
the
HTTP
repple
and
it's
a
dotnet
core
global
tool
that
you
can
install
a
machine
that
gives
you
a
command
line,
interactive
repple
for
interacting
with
API
endpoints
all
right.
So
how
do
I
get
this
this
tool,
so
you
install
it
from
the
command
line.
A
It's
a
dotnet
core
global
tool,
so
dotnet
tool
install
and
it's
we're,
gonna
install
it
globally,
so
deets
install
it
globally
and
the
version
that
you're
going
to
want
to
get
right.
Now,
though,
now
this
tool
is
currently
not
available
with
the
preview
to
release
that
we
just
shipped
it's
not
currently
on
new
get
quiet,
yet
it
will
be
in
the
next
few
weeks.
Also,
if
you
want
to
get
it
today,
you
should
be
installing
it
from
our
CI
dev
feed
on
my
get
so
the
version
you're
gonna
want
right
now
is
2.2
just
pick.
A
The
latest
preview
release
start
and
then
you're
going
to
need
to
add
an
additional
new
get
source
in
order
to
acquire
this
tool.
All
right,
I'm,
not
gonna
hand
typed
up
on
the
fly.
I've
got
a
copied
over
here.
Let's
go
ahead
and
grab
that
so
there's
the
my
get
feed
that
you're
going
to
want
to
use
it's
a
little
bigger,
so
dotnet
core
API
and
then
the
the
JSON
file
for
the
feed
and
then
the
package
ID
for
the
tool
is
dotnet.
Hdpe,
repple.
A
Okay,
when
you
run
that
that
will
then
install
the
tool
on
your
machine,
so
you
can
then
execute
it.
I've
already
installed
it
and
I
can
verify
that
by
doing
a
dot
net
tool
list,
G
to
see
all
the
global
tools
that
I
have
in
the
machine,
and
you
can
see
our
40
got.
The
HP
repple
installed
all
right
cool,
so
now
I
should
be
able
to
do
dotnet,
HTTP
Ruppel,
and
that
will
then
pop
me
into
this
interactive
repple
for
interacting
with
API
endpoints.
A
Now,
right
now
it
says
it's
disconnected
it's
not
connected
to
anything.
So
what
do
we
do?
So
we
can
use
this
rebel
to
talk
to
either
asp.net
core
api's
or
really
any
API
that
you
want.
So,
for
example,
I
could
point
it
at
the
github
API.
So
let's
point
it
at
API,
github.com,
alright
cool.
So
now
it
says
it's
connected
and
if
I
run
the
help
text
just
to
see
what
this
thing
can
do,
you
can
see
that
from
the
repple
I
can
issue
any
HTTP
requests
for
any
HTTP
method.
A
I
can
set
headers
I
can
whoa
look,
it
looks
like
it
has
information.
It
knows
how
to
deal
with
swagger
documents.
So
if
you
have
an
API
that
has
a
open,
API,
spec
or
a
swagger
document,
the
two
can
light
up
additional
functionality.
For
example,
it
allows
you
to
traverse
or
navigate
the
your
eye
space
of
your
API
using
file
system
like
commands
like
LS,
orderer
and
CD.
A
So
that's
pretty
cool
and
then
there's
also
a
capability
to
run
scripts
like
if
you
want
to
set
up
a
bunch
of
ripple
commands
that
you
just
run
as
a
batch.
You
can
run
them
all
together
by
just
creating
a
file
all
right.
So,
let's,
let's
try
this
out
so
I'm
just
going
to
clear
the
screen.
Let's
try
just
sending
a
get
request
to
the
github
API
and
I.
Get
a
nice
colorized
response
from
github.
Github
is
a
great
API.
A
They
are
hypermedia
based,
so
they
the
responses,
give
me
a
whole
bunch
of
links
that
I
can
use
to
then
traverse
to
other
resources
that
are
available
through
the
API
I.
Don't
know,
for
example,
look
here's
the
emojis
URL!
So
if
I
see
what
is
it
github
that
Conell
slash
emojis?
So
if
I
do
a
get
to
emojis
that
should
give
you
whoa
yeah.
It
gives
me
like
a
list
of
our
link
to
every
single
emoji
that
github
supports,
and
there
are
apparently
quite
a
few
of
those
and
we're
at
2
Z.
A
So
if
I
grab
one
of
these
links
and
pop
it
in
the
browser,
supposedly
I've
github
is
doing
their
their
thing,
then
I
should
be
able
to
see
you
in
emotion,
yeah.
So
there's
those
Ezz
emoji,
okay,
so
that's
pretty
cool.
Likewise,
I
can
point
this
to
my
to
my
web
api
for
a
spirit
core.
Let's
try
that
so
I'm
just
gonna
grab
the
base
URL
for
my
a
speed
on
a
core
API
so
set
base
once
at
the
base
to
there.
A
Good
and
I
should
be
able
to
a
get
request,
and
you
know
well
currently
at
the
root.
We
don't
have
anything
that's
due
to
API
slash
was
it
values?
Is
there
API,
yeah?
Okay,
so
I
can
use
the
repple
to
a
test
api.
Now
this
this
api
is
not
particularly
feature-rich.
So
let's
replace
it
with
an
actual
pets,
an
api
that
we
can
can
use.
So
let's
go
back
to
visual
studio
and
I'm
just
going
to
go
ahead
and
delete
this
values.
A
A
A
A
Add
a
controller
and
I'm
gonna
pick
this
API
controller
with
actions
using
any
framework
or
so
that
what
that
will
do
is
that
will
inspect
my
model
and
then
generate
an
API
for
me
using
energy
framework
or
to
manage
the
data
so
I'm
going
to
pick
my
pet
model.
I,
don't
currently
have
a
date
of
contact,
so
I'm
just
gonna
go
ahead
and
create
one
and
then
pets
controller
for
the
controller
name
sounds
great,
so
go
ahead.
Visual
Studio
create
for
me
my
pets,
API
without
me
having
to
write
a
whole
bunch
of
code.
A
All
right
cool,
and
so
this
is
saying
that
the
app
settings
that
JSON
files
that
updated
that's
just
because
it
added
a
connection
string
for
the
database
and
now
I've
got
a
much
more
feature-rich
API.
It's
got
actions
for
getting
all
my
pads,
getting
individual
pads
and
then
put
post
and
delete,
and
these
are
action
methods
that
actually
have
you
know
code
in
them
like
it's
using
a
database
context
to
save
data
and
manipulate
data.
So
that
looks
good
all
right
now.
A
One
more
thing:
I
want
to
switch
the
launch
URL
for
this
application
to
no
longer
be
API,
slash
values,
in
fact,
let's
just
put
it
at
the
root
so
and
I
want
to
use
my
HP
repple
to
now
test
this,
this
API.
How
can
I
do
that
so
I'm
gonna
wire
it
up
in
Visual,
Studio
and
the
way
I'm
going
to
do.
That
is
by
going
to
browse
width
in
the
drop
down
by
the
little
Run
button,
and
that
will
allow
me
to
select
which
browser
I'd
like
to
use
for
testing
my
API.
A
A
You
can
see
that
down
below
it's
in
your
user
profile
under
the
dotnet
tools,
folder
and
since
that
I
set
that
up
so,
let's
browse
to
our
API
using
the
HP
ripple,
alright
cool
so
now,
I
should
be
able
to
do
I
get
to
like
API
slash
pets,
and
oh,
this
is
probably
going
to
crash
because
I
haven't
done
anything
with
migrations,
because
this
is
a
this
app
actually
now
has
a
database.
Let's
quickly
run
migrations.
A
Let
me
run
to
the
package
manager
console
and
let's
do
a
migration
and
I'd
like
to
call
my
first
migration
initial
and
I'd
like
to
put
my
migrations
in
the
data
migrations
folder
I
like
to
keep
everything
under
the
data
folder.
So
what
that
will
do
is
that
will
generate
some
code
for
setting
up
the
tables
in
the
database
and
looks
like
that
works.
I
can
see
the
migration
code
is
over
here
and
now
we
just
need
to
apply
that
migration.
A
So
let's
update
the
database,
we
have
the
migration
and
that
will
allow
entity
framework
court
and
then
run
that
code
to
generate
a
whole
bunch
of
sequel
for
setting
up
the
tables.
For
my
for
my
pets,
API
we'll
just
give
it
a
second
and
there
goes
a
whole
bunch
of
sequel.
Ok,
so
now
it
should
be
all
set
up
and
I
should
be
able
to
reissue
that
get
request.
One
of
the
things
I
really
like
about
the
repla
you
just
arrow
up
and
re-execute
and
ok.
Now
we've
got
a
an
empty
array
of
pets.
A
We
don't
have
any
pets
yet
okay.
So
how
do
I
add
some
pets?
Well,
I
could
do
it
also
from
the
repple
right
now,
but
the
repple
can
become
much
more
feature-rich
if
we
actually
enable
swagger
for
my
API
I,
give
it
an
actual
spec
and
open
API
spec
so
that
the
tool
can
figure
out.
Well,
what's
the
URI
space
for
this
API?
What
types
does
it
expect
the
HB
repple
can
help
me
with
those
things.
A
If
it
has
that
information,
so
what
I'm
gonna
do
now
is
go
ahead
and
enable
swagger
generation
for
my
pets
API.
So
let's
go
back
to
the
project
and
I'm
going
to
use
a
community
project
called
swashbuckle
to
enable
swagger
documentation.
So
let's
manage
nougat
packages
and
I'm
gonna,
add
swashbuckle
ASP
core
and
that's
browse
for
it.
So
on
you
get
to
work
there,
it
is,
and
let's
go
ahead
and
install
that
if
you
haven't
used
swashbuckle
before
it's
a
great
open
source
project
that
does
swagger
generation
for
a
spinet
core
applications.
A
This
is
the
the
github
repo
and
it's
got
actually
some
really
nice
documentation
on
the
readme
for
how
you
set
it
up.
So
now
that
the
package
is
added,
let's
see
what
do
I
got
to
do
well,
I,
got
to
add
the
swagger
gem
services.
So
let
me
go
back
to
my
API
and
let's
go
head
into
the
startup
and
go
to
configure
services
and
the
swagger
gem
services.
Let's
change
from
my
API
to
pets,
API
and
just
add
a
the
missing
using
statement,
great
okay.
What
else
do
I
got
to
do?
A
Okay,
I'm
gonna
make
sure
my
API
follows
the
right
program
model
conventions
so
that
it
indicates
what
it's
HTTP
methods
are
and
so
forth.
I'm
already
doing
that,
because
I
Jedi
scaffold
in
my
code,
the
scaffolding
code
from
a
spirit
core,
already
follows
those
conventions
and
now
I
just
need
to
add
the
endpoint
for
exposing
the
swagger
document
and
also
the
swagger
UI.
Okay,
so
I
add
some
middleware,
it's
my
middleware
pipeline,
let's
use
some
swagger
and
then
lastly,
let's
use
the
swagger
you
line
alright
cool
and
again,
let's
change
this
name
to
pets.
A
Api
all
right
awesome.
So
now,
if
I
should
already
be
running
well,
won't
actually
want
it.
Let
me
show
the
nice
feature
of
the
repple.
Is
that
once
I've
got
swagger
generation
setup,
I
should
be
able
just
type
of
UI
and
it
will
bring
me
directly
to
the
swagger
point
for
the
api.
Let's
see
if
that
works,
and
there
it
is
okay.
So
now
I
can
see
my
using
the
browser.
I
can
see
all
the
endpoints
for
my
API
if
I
want
to
see
the
actual
raw
swagger
content.
A
That's
this
JSON
file,
that's
linked
from
that
main
UI
page,
and
this
is
nice,
so
I
can
do
things
here
now,
like
I've,
actually
want
to
issue
a
post.
This
swagger
UI
will
help
me
do
that,
so
let's
try
out
doing
a
post.
It
gives
me
it
knows
the
type
information
for
the
post
action.
So
we
can
do
things
like
say
like
the
owner
of
this.
Let's
add
a
new
pet,
so
the
owner
of
this
new
pet
will
be
me.
Let's
call
it
spot.
A
A
You
can
see
that
the
the
swagger
UI
is
showing
me
all
of
the
responses
that
are
supported
by
this
endpoint
that
are
advertised
in
the
swagger
document
and
currently
it
says
well,
it
returns
who
actually
says
that
it
turns
to
200
s
instead
of
200
201
s
is
interesting.
So
it's
not
quite
right
and
I'm
sure.
A
There's
probably
some
error
responses
that
it
returns
that
aren't
listed
here
so,
for
example,
if
I
go
back
and
try
and
add
another
puppy,
but
instead
of
its
age
being
one
I
said
it's
ages,
ABC
which
is
going
to
be
invalid
and
execute
that
yeah,
like
I,
expected
I
get
a
400
response
and
the
response
body
oh
this
is
this-
is
nice.
This
is
a
new
feature
in
preview
to
of
2.2.
A
We
now
return
problem
details,
responses
by
default
for
API
s,
and
we
even
include
a
nice
trace
ID
so
that
you
can
correlate
that
error
response
to
other
activities
in
your
application,
but
that's
not
advertised
anywhere
in
this
record
document
either.
Why
is
that?
Well,
that's
those
are
things
that
swashbuckle
wasn't
able
to
determine
just
by
inspecting
the
application.
So
we
have
to
do
a
little
more
work
to
add
some
attributes
to
make
it
aware
of
those
things,
and
we
can
do
that.
A
We
can
go
back
to
the
pets
controller
and
we
could
go
to
the
you
know
the
and
on
the
post,
action
and
use
the
appropriate
attribute
so
I
happen
to
know
that
it's
something
like
I
think
it's
produces
response
type,
but
then
you
specify
the
status
code
and
what
type
it
returns
we
could
do
that
manually.
That
would
be
pretty
tedious
and
there
would
be
no
good
way
to
enforce
this
across
all
of
my
API.
So
how
can
I
do
that?
A
Well,
one
of
the
things
we've
shipped
in
with
2.2
is
we've
added
an
API
analyzer
that
will
look
at
all
of
your
API
actions
and
determine
by
convention
what
types
of
responses
they
should.
They
will
generally
return
and
will
give
you
code
fix
ups
so
that
you
can
add
the
appropriate
metadata.
So,
let's,
let's
add
that
in
analyzer,
so
I'm
going
to
go
to
manage
Nuka
packages
and
let's
do
Microsoft.
A
All
right,
ok,
cool!
So
now,
if
I
look
in
the
the
error
window,
you
see
that
I'm
getting
all
of
these
warnings
now
from
the
analyzer,
letting
me
know
that
I
have
action
methods
that
were
returning
responses
that
aren't
documented
anywhere
on
on
the
controller.
None
of
the
appropriate
attributes
are
there.
So,
let's,
let's
click
on
one
of
those?
Let's
go
to
this
one,
for
example,
and
let's
we
can
right
click
and
let's
do
a
fix-up.
A
So
if
we
use
the
analyzer
fix
up
boom,
so
it
adds
all
of
the
appropriate
attributes
so
that
the
swagger
document
has
cleaned
up.
So
the
analyzer
helps
me
enforce
that
my
de
PII
is
appropriately
documented,
but
even
even
so,
it's
still
kind
of
tedious
to
go
one
by
one
to
each
action
and
add
all
these
attributes.
A
Is
there
a
better
way,
and
the
answer
is
yes:
in
2.2,
we've
added
some
API
conventions
where
we
can
determine
this
metadata
by
by
convention.
So
if
your
action
looks
a
particular
way,
we
will
go
ahead
and
apply
the
appropriate
attributes
for
you
now
to
apply
this
particular
convention.
What
you
do
is
you
add
API
when
it
was
an
API,
Convention
and
type
I
think
is
what
it's
called
so
I'm
gonna
apply
this
the
conventions
globally
across
my
assembly.
You
could
also
apply
them
per
controller
or
per
action.
A
So
let's
the
Assembly
was
an
API
convention,
type
yeah,
so
I'm
gonna
use
the
we
provide
you
a
default
set
of
conventions
that
are,
if
you
specify
using
this
default,
API
conventions
type
and
those
conventions
match
the
code,
that's
produced
by
the
API
scaffolders.
So
if
I
know
yes,
I
think
I
didn't
get
a
type
of
in
here
there
we
go
perfect.
Okay,
and
now,
if
I
go
look
at
my
air
list,
suddenly
all
the
analyzer
warnings
have
disappeared
and
that's
because
by
convention
the
the
runtime
is
now
saying.
A
A
Okay,
so
let's
look
at
like
so
post,
let's
see
so
yeah
so
now,
post
correctly
says
it
returns
a
201
or
400.
If
you
have
a
bad
bad
request,
if
I
look
at
get,
you
might
specify
an
ID
that
doesn't
exist,
so
this
should
return
to
404
and
yep.
Now
that's
advertised,
so
those
are
all
being
applied
for
me
and
being
enforced
by
the
analyzer.
If
I
deviate
from
these
conventions,
the
analyzer
will.
Let
me
know,
that's
super
nice.
A
Now,
if
you
don't
like
the
default
conventions
that
we
give
you,
you
can
of
course
use
your
own
they're,
pretty
easy
to
implement.
These
conventions
are
just
implemented
as
a
static
type,
where
the
methods
on
the
type
basically
define
a
pattern
that
should
be
matched
and
the
appropriate
metadata
should
be
applied.
So,
for
example,
for
a
get
a
get
action
if
you
have
a
method,
an
action
method
that
starts
with.
Yet
this
is
a
prefix
match
if
your
method
starts
with
yet
then
it's
saying
apply
these
additional
metadata
attributes.
A
If
it
also
has
an
ID
parameter,
or
at
least
an
a
parameter
named
I
a
suffix
with
ID
and
is
of
any
type
in
that
case,
it
match
and
will
provide
the
file
at
the
appropriate
attribute.
So
if
you
define
your
own
API
convention
type,
the
convention,
the
the
analyzer,
will
pick
up
that
convention
and
help
you
apply
them
as
well
because
similar
to
giving
you
warnings
and
such
over
your
code.
A
So
that's
how
you
can
have
better
documentation
for
your
API
and
so
now
I
should
be
able
to
go
back
to
my
HP
r
apple.
Let's
see,
let's
yeah!
So
let's
clear
this
and
let's
see
if
we
can
get
some
more
information
yeah.
So
now,
when
I
do
LS
and
CD
I
can
see
the
API
surface
area
like
the
year
I
space
exceeded
API,
let's
see!
What's
here,
oh
there's
a
pets
and
point:
that's
super
nice
and
I
can
even
see
which
HTTP
methods
are
supported
at
each
resource.
A
I
can
see
routes
that
take
route
parameters
like
I
know,
there's
one
that
takes
an
ID.
So,
let's
see
if
we
can
get
get
our
our
puppy.
Ok,
our
puppy
is
there
I
could
get
like
an
individual
puppy
like
get
one.
That's
the
individual
one.
Let's
add
some
more
puppies
now
or
two
more
pets.
They
don't
he'll
have
to
be
puppies.
So,
let's
post
a
new
pet
I
need
to
specify
the
content
type
of
what
I'm
going
to
post.
A
So
I
use
H
to
specify
I,
want
to
add
a
header
and
a
super
nice
feature
here.
Is
we
get
tab?
Completion
over
that
or
so
that's
great,
so
just
tab,
complete
content
type
and
then
even
for
the
the
media
type
itself,
I
can
tap
complete
and
say
yeah.
This
thing
accepts
JSON
data,
so
lets
issue
a
post
when
I
issue
a
post.
It
pops
up
whatever
editor
I,
have
configured
and
gives
me
a
little
jason
sample
that
I
can
now
use
to
post
a
new
pet.
A
So,
let's
again
make
this
pet
be
mine,
let's
call
it
fluffy
what
kind
of
type
this
would
be.
Let's
say
it's
a
tarantula
and
what
age
you
know.
Surprisingly.
Tarantulas
live
a
long
time
I
they
can
live
to
be
over
20
years
old,
so
a
20
year
old,
tarantula
and
there
we
go
so
now.
If
I
do
another,
get
I
should
have
two
pets
and
I
do
let's
add
one
more
and
I
can
just
get
in
up
arrow
and
risk
you
a
post
request
what
pet
should
I
add
here
this
pet,
my
mom.
A
Actually,
when
she
was
younger,
she
owned
a
pet
duck.
So
this
will
be
my
my
mom's
pet
and
I
think
I
believe
his
name
was
George.
He
was
a
big
white
duck
and
I,
don't
know
how
it
was.
George,
don't
know
safe,
and
so
now
we
have
a
bunch
of
pets.
Okay,
so
there
we
get
so
now
we
can
see
all
the
pets
in
our
API.
So
that's
super
nice,
that's
using
the
HP
ripple
to
test
and
develop
once
you've
enabled
a
good
swagger
experience
using
the
API
analyzer
and
the
API
conventions.
A
Alright,
so
great
API
looks
like
it's
working.
Let's
now
create
a
client
library
that
we
can
use
to
consume
this
API.
So
let's
go
back
to
the
project.
Let's
add
a
new
project
to
the
solution:
that's
going
to
be
a
just,
a
normal
dotnet
standard
class
library,
so
docket
standard.
Let's
call
it
a
pets.
Client
looks
good
all
right
and
we
can
get
rid
of
this
class.
A
That's
passed
yes,
and
what
I
wanted
to
do
here
is
I
want
to
create
some
code
that
people
can
use
to
consume
my
API
so
make
it
easier
for
them
to
consume.
My
API
and
I'd
like
to
generate
it
based
on
the
swagger
definition.
So
what
I'm
gonna
do?
Let's,
let's
add
a
new
item
to
the
pets,
client
class
library
project?
A
Let's
install
this,
it's
open
source,
it's
on
github,
here's,
the
project
URL
and
the
nice
thing
about
n
swag
is
it
supports
both
open
API,
spec
generation
or
swagger
generation,
as
well
as
code
generation.
Based
on
that
specification,
and
it
can
generate
you
know,
Donna
Cote,
sharp
code.
It
can
generate
tight
script
code.
You
can
even
generate
the
API
code
if
you'd
like
like,
if
you
want
to
have
a
spec,
that
someone
gives
you
and
they
say
like.
Please
go
implement
this
API.
A
You
can
do
that
with
with
n
swag
all
right,
so
I'm
gonna
wire
up
n
swag
as
part
of
the
build
of
my
project.
So
that's
edit,
the
CSS
proj
file,
I'm
gonna
I've,
already
got
the
target
set
up
here
in
my
snippet
manager,
also
known
as
notepad,
so
I'm
just
gonna
copy
that
in
and
so
all
this
does
is
to
find
a
new
target.
A
That's
gonna
happen
before
build
and
it's
gonna
run
the
end
swagg
command-line
tool
to
generate
some
c-sharp
client
code
from
the
swagger
document,
and
it
pointed
it
at
the
pet
swagger
jason
file
specified
the
namespace.
I
specified
a
couple
of
additional
parameters
like
I'd
like
to
be
able
to
inject
the
HP
client
that
it
uses.
So
I've
set
that
to
true
and
then
I've
also
specified
what
the
output
file
name
should
be.
Okay.
So
let's
save
that
and
now,
if
I
just
build
my
API
client
library,
hopefully
I'll
get
some
client
code.
A
Let's
see
if
that
works
bills
exceeded
and
voila,
we
have
a
new
pet
client.
That's
yes,
file
with
some
generated
code
that
I
can
use
to
consume
the
API.
Now
that
whole
experience
of
you
know
acquiring
the
swagger
or
a
open,
API
spec
for
an
API
pointing
a
you
know
your
build
for
a
library
to
that
document
and
having
a
generate
client
code
for
you.
A
A
And
we
should
be
good
yeah,
ok
great!
So
now
we
got
our
client
library
alright.
So
now,
let's
nuts
build
an
application
with
this,
like
I
I
mean
I
work
on
asp.net,
so
I'd
like
to
build
a
web
application.
I
have
a
dotnet
class
library
I.
Don't
really
feel
like
writing,
JavaScript
right
now,
so
for
our
client
application,
let's
create
a
blazer
application.
Now,
if
you're
not
familiar
with
blazer,
is
a
relatively
new
experimental
project
for
running
net
code
in
the
browser
and
it's
run
in
the
browser
via
web
assembly
and
I've
got
blazer.
A
The
blazer
extension
installed
in
Visual
Studio
here
so
I'm
going
to
add
a
new
project.
To
my
to
my
solution,
that's
going
to
be
a
blazer
app!
So
let's
call
this
one
pets
app,
that's
gonna
have
some
UI
and
blazer
apps
can
run
any
dot
in
standard
library,
so
they
should
be
able
to
use
our
pets.
Client,
okay,
so
it's
the
blazer
is
not
not
part
of
2.2.
It's
just
an
experimental
project
that
we've
been
working
on.
Okay,
so
that's
create
a
new
blazer,
app
I'm
gonna.
A
Add
it
to
my
solution,
very
cool,
all
right,
and
now
that's
just
a
reference
from
my
blazer
app
to
the
client
library
that
I
just
created
previously
generated
from
swagger
all
right
now.
I
need
to
also
there's
one
workaround.
I'm
gonna
have
to
do
with
the
blazer
app.
Currently.
This
is
something
that
we
will
be
fixing
in
the
future
in
order
to
allow
it
to
work
with
mints.
Often
it's
just
a
temporary
limitation,
but
I'm
gonna
turn
off
the
Blazer
linker.
A
This
will
make
the
app
a
little
bit
larger,
but
it
will
make
more
things
work,
so
we're
gonna
do
that
quick,
workaround
I
also
need
to
now
host
this
blazer
application.
Blazer
applications
are
a
purely
client-side
they're,
just
a
bunch
of
static
files,
so
you
can
host
them
wherever
you.
What
you'd
like
I,
want
to
host
this
particular
blazer
app
in
my
asp.net
core
app
in
the
pets
API
project,
so
to
do
that
I
can
just
add
a
helper
package
for
hosting
blazer,
apps
and
AC
on
asp.net
core
and
that
one
is
blazer
dot
server.
A
Okay
and
once
that's
in,
we
need
to
add
our
reference
from
the
hosting
out
to
the
blazer
application
looks
good.
So,
let's
add
another
reference
to
the
pets
app
from
the
pets.
Api
project,
all
right
cool,
so
now
I
should
be
able
to
go
into
startup
in
my
h-net
core,
app
and
say
app
dot,
use,
blazer
and
I'm
just
going
to
point
it
at
the
the
app
the
the
program,
the
program
class
from
the
blazer
application.
So
it
knows
host
and
that's
all
you
gotta
do
all
right
cool
all
right.
A
So
now
let
we
should
be
able
to
use
the
pets
client
from
our
blazer
app.
So
let's
go
into
the
startup
class
for
the
Blazer
application
and
I'm
going
to
add
the
pets
client
as
a
service,
so
that
I
can
inject
it
to
any
of
my
pages
or
components
so
I'm
gonna,
say,
services,
singleton
and
I
want
to
add
the
was
it
pets,
client
I,
think
it.
The
name
of
the
class
is
generators,
doc,
client,
okay
and
I'm.
A
Just
gonna
add
that
as
a
singleton
service
blazer
on
the
way,
the
reason
why
this
works
is
because
the
the
generated
client
code
takes
in
its
constructor
and
HP
client
and
blazer
applications
make
HP
client
available
as
a
service
as
well,
and
it's
already
wired
up
with
the
right
base
URL
and
with
the
right
message
handler
so
that
works
in
the
browser.
So
when
we
resolve
the
pets
client,
it
should
get
just
get
the
right,
HP
client
under
the
covers
by
default,
which
is
great
all
right.
A
So
that
should
be
all
we
need
to
do
there
to
make
it
available
as
a
service
and
now,
let's
just
add
some
code.
So
in
my
home
page
for
my
Blaser
app
and
I
write
a
little
code
here-
let's
do
an
ienumerable
I'd
like
to
do
a
new
pet.
I
think
I
need
to
add
a
using
statement
here
so
using
pets,
client
yeah,
so
I
memorable
of
pet-
I
guess
yeah,
so
it
gets
a
tell
'since
there.
So
let's
call
this
variable
pets
and
then
lets
on
when
this
page
loads.
A
And
on
an
async,
because
what
we're
gonna
do
because
we're
gonna
do
an
async
call,
so
we
should
make
sure
we
use
the
async
version.
So
let's
make
this
a
sync
and
then
in
here
let's
just
acquire
all
the
pets.
Okay,
so
I
need
a
pets.
Client.
Now
how
do
I
get
that
from
this
page?
Well,
it's
just
razor,
so
we
can
use
the
normal
at
inject
syntax,
which
basically
will
create
a
property
on
this
page
of
whatever
type
you
want.
A
I
know,
I
want
a
pets,
client,
client
and
let's
call
the
name
of
the
property
pets
client.
So
now
I
should
just
be
able
to
refer
to
this
pets
client
anywhere
in
this
code.
So
let's
take
the
pets
variable
we
created
previously
and
let's
just
populate
it.
By
doing
pets,
clients
you
up
getting
intellisense
dot,
and
what
do
you
want?
So?
A
The
the
method
name
that
were
generated
by
n
swag
are
based
on
the
your
eye
path
segments
for
the
various
end
points
I
want
to
just
do
a
get
so
API
pets
get
a
sync,
is
the
one
I
want
I
don't
have
to
pass
anything
because
it
already
knows
about
the
your
eye.
Space
and
I
should
be
yet
so
now.
I
should
have
all
the
pets
now
I
just
need
to
render
some
UI,
so
I
can
see
them.
So,
let's
add
a
little
header
here.
Here's
my
pets
and,
let's
add
a
little
if
clause.
A
So
if
the
pets
are
ready
like
if
it's
not
null,
then
let's
do
an
unordered
list
here
and
then
for
each
of
our
pet
in
pets,
yeah,
Kenny,
intellisense
great,
then
what
are
we
going
to
do?
We
want
to
generate
a
list
item
and
we'll
put
the
pet
name:
Pet
dot,
name,
alright.
If
the
pets
are
still
no
like,
we
haven't
actually
successfully
loaded
them.
Yet
then,
let's
just
display
a
little
message
that
says.
A
A
A
Cool
all
right,
so
our
Blazers
are
applications
starting
up.
And
if
we
look
at
the
home
page,
it
says
pets
finding
pets
yeah
there
they
are
so
there.
So
that
was
a
intend
experience
so
creating
an
API
using
scaffolding,
adding
documentation
for
that
API
using
swagger
or
an
open
API
spec
testing
the
API
using
the
HP
repple,
consuming
that
API
using
a
client
library
with
code
that
we
generated
and
then
using
that
from
an
application.
A
All
right
so
to
make
API
is
easier
to
create.
We
give
you
a
scaffolding,
and
the
scaffolders
in
2.2
have
been
updated
with
the
latest
conventions
to
make
them
easier
to
test.
You
can
use
the
HP
r
apple
to
make
them
easier
to
debug.
We
also
like
I,
said
use
problem
details,
responses
with
a
trace
ID,
so
you
can
track
them,
correlate
them
with
other
activities
in
your
system
document
them
using
swagger.
A
The
API
conventions
will
help
you
do
that,
as
will
the
analyzer
so
that
you
enforce
those
conventions
consistently
across
your
API
to
consume
them.
We
are
in
going
to
enable
a
cogeneration
experience
in
preview.
3,
that's
coming!
For
now.
You
can
use
the
existing
open
source
projects
that
are
already
available
in
the
community.
We
are
also
planning
to
ship
an
authorization
server
based
Web
API
security
story
in
the
next
preview
of
2.2,
not
much
to
share
on
that
yet,
but
just
want
to,
let
you
know
more
is
coming.
A
As
for
monitoring,
you
can
use
health
checks
to
make
sure
that
your
API
is
are
live
and
that
they're
ready
to
receive
traffic
I'll
show
more
about
that.
In
just
a
bit
and
as
for
performance,
all
of
the
new
performance
related
features
in
this
release.
They
of
course
apply
to
API.
You
can
use
HTTP
to
you,
can
use
the
new
endpoint
routing
system,
both
which
have
significantly
better
performance
and
then
also
is
in
proc
hosting.
So
now,
let's
go.
A
Take
a
look
at
some
of
those
other
new
features,
so
hb2,
that's
also
new
in
in
2.2
it's
available
cross-platform
in
kestrel.
It
supports
a
LPN.
It
supports
header
compression
and
also
multiplex
streams.
Now
this
is
great
because
it
means
hb2
basically
means
HTTP
but
more
efficient,
like
faster,
better,
better
performance.
It
is
a
new
protocol
implementation
for
us,
so
there
are
some
limitations
that
you
should
be
aware
of.
A
We
don't
currently
support
server
push
and
we
don't
currently
support
stream
prioritization,
also
because
this
is
a
new
protocol
similar
to,
if
you
remember,
Kestrel,
and
it's
in
its
early
days,
we
don't
currently
recommend
using
HTTP
2
with
Kestrel
on
the
edge
at
this
time.
It
needs
some
more
time
to
harden
and
to
bake,
but
it
is
enabled
by
default
in
2.2
when
you're
using
HTTP.
So
we
encourage
you
to
try
it
out
now.
Let
me
show
you
what
the
impact
of
HTTP
HB
2
is.
So
I
have
a
little
test
application
that
I
wrote.
A
A
A
So
let's
set
s
there
on
a
project
and
go
ahead
and
get
that
running
and
see
what
that
looks
like
now
to
make
the
the
difference
a
little
bit
easier
to
spot
I've
added
some
some
artificial
latency
to
each
of
the
requests
about
a
hundred
milliseconds
of
latency
for
each
image
request.
So
if
things
look
like
a
little
slow,
it's
not
because
the
pipeline
is
slow
is
just
because
that's
been
was
artificially
added.
So,
as
you
can
see
with
the
HTTP
1
1
version
yeah,
you
know
the
tiles
come
down.
A
A
Let's
set
this
as
a
startup
project
and
go
ahead
run
that
all
right.
Let's
pull
that
out
side
by
side
all
right,
you
know
that's
controller
5,
so
we
can
so
it
actually
lowers
really
really
fast.
How
is
that
possible?
Well,
this
is
basically
the
stream
month
multiplexing
in
HB
2,
that's
allowing
you
to
get
much
faster
load
time,
so
you
can
send
multiple
requests
basically,
over
the
same
connection,
so
much
faster,
dom
complete
time
on
this
one,
then,
on
the
HP
one
one
version,
and
we
can
we
can.
A
You
know
refresh
this
a
few
times
just
to
make
sure
we're
not.
You
know
slow
because
it's
cold
or
whatever
ooh
looks
like
that.
One
took
a
little
longer.
Let's
do
that
there
it
go
so
there's
a
much
faster
time,
so
it
a
little
hiccup
on
my
machine.
So
that's
all!
Hopefully
you
can
see
the
difference
there
that
you
get.
You
can
get
some
really
nice
performance
out
of
HTTP
too.
A
He
stopped
the
stop
the
server's
all
right,
so
that's
HP
to
support
and,
like
I
said
it's
on
by
default
as
long
as
you're
over
HTTPS,
it
does
require
HTTPS,
also
new,
the
new
in
proc
hosting
model
for
iis.
We
had
started
work
on
this
actually
in
an
earlier
release,
but
we
are
now
shipping
it
with
with
2.2.
Currently,
when
you're
host
a
speedo
net
core
applications
in
IAS,
it
uses
an
out
of
process
hosting
model.
A
A
It
also
causes
some
reliability
issues
if
anything
goes
wrong
with
starting
up
that
dotnet
XE
process
or
if
it
crashes,
for
whatever
reason
in
your
application,
then
breaks
and
it's
hard
to
figure
out
why,
with
a
new
in
process
model,
your
asp.net
core
app
actually
runs
directly
in
the
is
worker
process,
which
gives
you
much
better
performance
and
much
better
write
reliability
if
things
go
wrong,
it's
easier
to
figure
out.
Why?
So
that's
the
main
motivation?
A
Why
we're
doing
this
this
feature
and
in
the
performance
is
looking
really
really
good
in
our
latest
perf
tests
like
these
were
back
in
August
we're
seeing
like
four
times
the
performance
throughput
for
like
a
benchmark
where
we're
just
turning
adjacent
payload,
using
both
the
in
process
model
and
the
out
of
process
model.
So
looking
great
there
to
see
it
in
action
is
pretty
easy
for
this
one.
You
really
do
need
the
latest
version
of
Visual
Studio
15
9
preview
too.
A
So
let's
go
back
to
vs
and
let's
go
back
to
the
project
that
we
created
at
the
beginning
of
the
of
the
session.
This
was
just
a
normal
razor
pages
application
and
what
we're
going
to
do
is
we're
going
to
go
into
the
home
page
and
we're
just
going
to
print
out
the
name
of
the
current
process.
So,
let's
add
a
header
element
here
and
say:
system
Diagnostics
process.
A
Let's
get
the
current
process
and
print
out
the
name,
not
the
Machine
name,
the
process
name,
alright
great.
So
now,
if
we
look
at
the
the
CS
proj
for
this
for
this
project,
our
templates
now
do
specify
in
the
CS
brush
file
that
we
should.
It
should
use
the
in
process
hosting
model
for
or
a
snicker
when
running
on
is
so
by
default.
All
the
new
2.2
projects
will
have
this.
If
we
run
this
in
Visual
Studio,
it
seems
currently
the
studio
by
default
will
ignore
that.
But
let's
see.
A
Fortunately,
we
can
use
viesta
to
change
it
yeah.
So
currently
it's
saying
it's
actually
running
out
of
process
in
the.net
XE
process.
Ok,
let's
see
if
we
can
fix
that,
because
I
want
that
/
fine,
what
the
better
reliability.
So
if
we
go
to
our
project
properties
and
go
to
debug
at
the
bottom,
you
can
see
there's
a
new
setting
now
for
setting
the
hosting
model.
Currently
it's
specified
as
default.
We
can
change
that
to
say
2
it
to
be
in
process.
A
Alright,
next,
let's
talk
about
health
checks,
so
new
and
asp.net
core
2.2
we've
added
support
for
for
health
checks.
You
can
add
dedicated
health
endpoints
to
your
application,
so
that
container,
orchestrators
and
load
balancers
can
figure
out
if
your
your
app
source
or
services
are
live
and
ready
to
receive
traffic.
It
supports
health
checks,
for
both
liveness,
like
is
the
is
the
app
even
running
and
also
health
checks
for
for
readiness.
Probes,
like
is
the
traffic
running,
but
not
quite
ready
yet
to
receive
to
receive
traffic.
You
can
do
both
with
the
health
check
system.
A
Let's
go
and
close
these
all
right.
Little
application
that
uses
health
checks,
so
a
Smith
checks
to
two
and
the
health
checks.
Api's
are
already
included
with
the
a
spec
or
shared
framework
into
two.
So
like
we
go
looking
through
our
dependencies,
we
can
just
search
here
actually
for
like
health,
and
we
can
see
that
there's
the
ace
net
cord
diagnostics
health
checks
package,
that's
showing
up
in
my
dependency
graph,
so
it's
already
there
you
can
just
use
it.
A
Don't
need
to
add
anything,
at
least
when
you're
running
on
dotnet
core
and
then
to
use
health
checks.
First,
you
add
the
health
check
service
and
then
any
checks
that
you
want
to
do
so
in
this
application.
What
I'm
doing
is
I
have
a
health
check
that
says
this
app
is
only
healthy
if
a
particular
required
configuration
value.
Is
there
if
it's
not
there,
the
app
isn't
healthy,
and
this
is
intended
to
mimic
a
case
like,
for
example,
where
you
want
to
have
a
health
check.
That
checks
to
see
is
my
connection
to
the
database.
A
Good
like
is,
is
it
is
a
set
up
and
ready
to
go?
You
would
do
something
very
similar
to
that
here,
but
to
keep
it
simple,
we're
just
going
to
check
a
config
value
and
see
if
it's
there
or
not,
and
then
to
add
the
health
check
and
point
down
below
in
our
request
handling
pipeline,
we
just
say
use
health
checks
and
specify
the
path
where
we'd
like
the
endpoint
to
to
be
okay.
So
now,
let's
see
I
have
already
gone
and
deployed
this
application
to
to
Azure
as
an
azure
app
service.
A
I've
actually
deployed
into
two
separate
as
wrap
services.
I
have
one
that's
running
in
and
they're
running
in
two
different
regions,
one's
running
in
central
US
and
the
other
one
is
running
in
in
Western,
Western,
Europe,
okay
and
and
both
of
these
have
health
checks,
enabled
it's
just
literally
the
same
application.
So
if
I
do
slash
health
in
Mars,
this
guy
healthy
Oh,
currently
it's
unhealthy.
That's
probably
means
it's
got.
Let's
go
fix
that
real
quick,
so
it
probably
means
the
required
config
value
is
not
there
yep.
A
Okay,
I
should
now
be
updated,
and
if
we
wait
for
this
to
refresh
hopefully
and
after
the
app
has
a
chance
to
recycle,
should
now
say
that
it's
healthy.
A
Okay,
second,
for
app
service
to
restart
the
app
okay,
so
health,
okay,
yeah.
So
now
it's
healthy
again,
that's
good!
So
we
have
one
healthy
app
and
then
the
one
in
Western
Europe
also
has
a
health
endpoint.
We
can
click
browse
to
that
one
and
see
that
one's
healthy,
too.
Okay,
good
I've
also
set
up
Traffic
Manager
in
Azure
to
route
request
to
those
two
different
applications
using
the
performance
routing
method.
So
what
does
that
mean?
A
Well,
the
performance
routing
method
means
that
it
will
pick
which
app
will
give
you
the
best
experience
based
on
like
like.
What's
what
will
give
you
the
best
latency?
So
it
will
generally
pick
the
one
that's
closest
to
you
since
I'm
in
the
United
States.
It
should
generally
give
me
the
the
US
version
of
the
application.
Let's
see,
if
that's
the
case,
so
here's
the
traffic
manager,
your
I.
This
is
a
you
know:
dns-based
load,
balancing
system
and,
if
I
rerun
this
one
yeah.
So
it's
routing
me
to
Central
u.s..
So
that
looks
good.
A
But
what
if
Central
US
isn't
working
correctly
like
I
said
I
deploy
the
application
to
Central
US
and
that
app
is
is,
is
no
longer
healthy.
So
let's
go
back
to
the
app
and
make
it
unhealthy
again,
so
I'm
gonna
take
that
require
config
and
imagine
someone
you
know:
did
it
wrong
and
deployed
a
bad
configuration
for
this
app?
A
Let's
save
so
I
should
probably
show
how
I
configure
this
in
traffic
traffic
manager,
so
here's
the
two
endpoints
that
I
set
up
and
then,
if
you
look
at
the
traffic
manager
configuration
in
the
endpoint
modern
monitoring
settings
section,
you
can
see
that
I've
specified
the
path
for
the
health
check,
endpoints
to
be
slash,
health
and
then
IND
is
configured
some
values
for,
like
you
know
how
many
times,
which
should
that
health
endpoint
remain
unhealthy
before
it
actually
does.
It
fall
over
logic.
A
Okay,
so
hopefully,
let's
see
if
the
yes,
okay,
so
now
the
us
app
is
not
working
correctly,
because
it's
not
configured
correctly
and
if
I
try
and
hit
this
in
traffic
manager.
Let's
see
if
traffic
manager
is
actually
updated
to
say
that
it's
unhealthy
yeah.
So
now
it's
saying
that
the
us
endpoint
is
degraded.
A
Do
you
see
that
and
if
I
go
grab
I
think
normally
it
gets
cached
a
little
bit
so
I'm
gonna
find
that
it
helps
if
I
go
to
an
in
private
window,
go
back
to
traffic
manager
and
now
it's
bound
instead
of
bouncing
me
to
the
US.
It's
bouncing
me
to
Western
Europe,
so
that's
health
checks.
You
can
use
them
to
make
your
apps
more
reliable
and
easier
to
monitor.
A
We've
been
testing
this
routing
system
using
actually
the
the
open,
API
spec
for,
like
all
of
a
sure,
like
all
of
as
yours,
management
plane,
and
you
know
thousands
of
endpoints
and
it
scales
great
even
to
that
many
of
endpoints.
It's
also
really
nice
because
it
moves
the
routing
concerns
lower
in
the
stack
so
that
you
can
use
them
in
more
places,
including
outside
of
MVC.
So,
for
example,
if
you
want
to
generate
a
link
from
middleware
to
some
endpoint,
you
can
do
that
with
the
new
endpoint
routing
system.
A
A
We
also
added
a
new
catch-all
syntax
with
to
star
star
star,
which
will
encode
everything
that
gets
captured,
except
for
the
slashes,
so
that
you
can
more
easily
round-trip
your
eye
paths
that
have
to
contain
slashes,
so
new
important
rounding
system,
it's
kind
of
laying
the
foundations
right
now
for
even
an
additional
work
that
we
want
to
do
in
the
routing
space.
So
you
should
expect
to
see
even
more
improvements
coming
in
future
previews
and
future
releases.
A
Alright,
the
last
thing
I
want
to
show
you
is
the
new
HP
double
net
core
Java
client.
We
have
a
new
Java
client
library
that
you
can
use
to
connect
to
a
speed
net
core
signal,
our
hubs
it's
available
for
Gradle
and
also
for
for
maven,
and
it
is
starting
in
preview
to
it
now
also
supports
the
azure
signal
our
service.
So
if
you
want
to
write
an
Android
application,
that's
written
in
Java
using
signal
R
to
add
real-time
capabilities,
and
you
want
it
to
scale.
You
can
use
the
azure
signal
our
service.
A
To
do
that.
We
have
a
really
nice
Android
people
using
the
Java
client
that
you
can
take
a
look
at
and
I'll
show
you
that
next,
okay,
so
I
have
Android
studio
installed
here
with
the
the
Android,
the
the
signal
our
Android
sample,
already
wired
up.
If
we
look
at
the
build
up
Gradle
file,
you
can
see
here's
the
there's
we
highlight
again,
so
you
can
see
it,
there's
the
signal,
our
library
being
added
as
a
dependency.
So
I'll
come
to
my
craft
that
car
combat
Microsoft
HP
net
:
signal
earth.
A
This
is
a
preview
one
version.
We
need
update
that
to
preview
too,
but
the
code
is
basically
the
same.
If
we
look
at
the
mainactivity.java,
you
can
see
that
it
just
looks
like
the
normal
signal.
Our
client,
you
create
a
hub
connection
to
a
hub
here:
I
have
a
hub,
that's
hosted
on
Azure
and
then
down
below.
It's
listening
for,
has
a
callback
for
receiving
send
events
from
from
the
hub.
So
when
someone
sends
like
a
chat
message,
it
can
then
update
the
the
UI
and
then
down
below.
A
If
the
user
clicks
the
button
and
sends
its
own
message,
it
uses
the
hub
connection
to
send
that
message
to
all
the
other
connected
clients.
Alright,
so
let's
let's
try
it
out.
So
I've
got
the
Android
emulator
up
here
and
running:
let's
go
ahead
and
fire
up
the
application
and
parallel
let's
go
ahead
and
let's
browse
to
the
web
version
of
the
client,
so
I
think
that's
that
signal
our
samples
hub,
email
great.
A
So
this
is
just
a
little
web
client
that
talks
to
the
same
same
hub
and
I'm
going
to
connect
from
the
web
client
and
you
can
see
in
the
Android
version.
It's
recognized
that
another
user
has
joined
and
so
from
the
Android
app
using
the
Java
client.
We
can
say
like
Hello,
dotnet
stir
and
send
that
and
down
below
so
yup.
We
got
that
message
in
real
time
in
the
web
app
and
then
from
the
web
app.
A
A
All
right,
so
those
are
the
new
features
available
with
2.2
I
hope
you
enjoyed
learning
about
them.
What
is
the
roadmap
for
the
2.2
release?
Well,
we
shipped
preview
2
in
September
trip.
Today
we
expect
to
ship
preview
3
I'm
about
a
month
from
now
in
October,
and
then
we
hope
to
ship
an
Archie
WS,
stable
release
of
asp.net
core
2.2
by
by
year,
end
of
2018
and
I
hope
you
enjoyed
what
you
saw
and
that
you'll
take
the
time
to
go.
A
A
Alright,
so
any
plans
to
provide
an
updated
templates
for
view
GIS,
if
not,
how
easy
is
it
for
the
community
to
create
these
templates?
So
we
currently
have
spa
templates
for
angular
4
react
and
react
plus
Redux.
We
have
actually
done
view
templates
in
the
past.
You
know
these
fret
Java
JavaScript
frameworks
that
move
very
quickly,
there's
quite
a
bit
of
maintenance
cost
and
keeping
those
templates
up
to
date,
so
we've
scaled
back
actually
to
just
supporting
angular
and
and
react
at
least
for
the
ones
in
the
box
in
the
future.
A
We
actually
find
a
take
that
even
those
templates
and
move
them
and
to
be
just
shipped
as
template
packages
as
NuGet
packages,
instead
of
having
them
actually
in
the
sdk.
So
we
have
the
ability
to
be
more
agile
and
update
them
as
client
libraries
version.
We
don't
currently
have
plans
to
add
support
for
view
or
Oralia
or
any
of
the
other
frameworks.
A
If
the
community
would
like
to
have
build
these
templates,
you
absolutely
can
anyone
can
actually
create
a
template
pack
as
a
new
get
package
ship
it
to
new
viata
work,
and
then
you
can
install
them
by
doing
dotnet,
new
I
and
just
point
at
the
package
ID
for
the
package.
So
if
the
committee
would
like
to
maintain
a
view
version,
that's
that
would
be
totally
great
and
people
should
absolutely
do
that.
I'm
sure
the
code
for
the
version
of
the
view
template
that
we
used
to
have
is
still
kicking
around.
A
That
would
probably
be
a
good
good
starting
point
next
question:
can
we
experiment
with
dotnet
core
that
in
Visual
Studio
code?
Yes,
absolutely
you
can.
The
main
reason
why
we
recommend
using
the
latest
preview
version
of
Visual
Studio
is
because
there
are
our
features
that
light
up
with
that,
with
that
preview
release
like,
for
example,
being
able
to
use
new
improv
hosting
model
when
you're,
building
and
debugging
your
applications
that
that
support
was
added
in
the
latest
preview
version
of
Visual
Studio.
A
Also,
the
scaffolding
support
so
that
you
can
scaffold
both
bootstrap
3
or
bootstrap
4
versions
of
UI.
For
a
spinet
core
that
was
added
in
the
latest
preview
release
of
Visual
Studio,
but
you
can
still
do
development
with
any
editor
that
you'd
like
if
you
like,
Visual
Studio
code,
absolutely
you
can
dotnet
build
dotnet,
Rondon,
I'd,
publish
all
those
things
get
intellisense.
Those
things,
though
the
runtime
features
and
the
framework
features
will
of
course,
continue
to
still
work.
A
So
the
next
question
was
about
the
about
swagger
and
the
HP
repple
that
they
seem
to
have
open
lapping
concerns.
Do
we
really
need
both
and
I
think
the
answer?
There
is
absolutely
yes
like,
depending
on
how
you
like
to
work,
some
people
like
to
have
a
GUI
UI.
They
like
to
be
able
to
point-and-click
and
CC
pixels
on
the
screen
when
they're
doing
the
development
flow.
Other
people
really
like
the
the
productivity
of
a
command-line
interface.
That's
that's
scriptable
that
you
can
just
up
arrow
and
repeat,
repeat
interactions.
A
The
swagger
UI
is
also
very
generic,
like
it's
based
on
whatever
you
can
from
swagger
with
the
HP
ripple.
We
think
there's
also
opportunities
for
us
to
do
things
that
are
more
dotnet
specific
to
add
value
to
done
in
scenarios.
For
example,
in
the
past
we've
looked
at
like
exposing
log
information
directly
from
the
HP
ripple.
When
you
get
like
a
500
response
from
the
server,
we
could
do
that
for
a
dotnet
application.
We
don't
necessarily
can't
necessarily
do
that
generically
from
the
swagger
UI.
A
A
Next
question
is:
are
there
any
options
for
managing
secrets
like
connection
strings
with
passwords
etc
other
than
in
key
vault?
Well,
I
would
certainly
absolutely
recommend
using
key
Balt
for
whatever
secrets
you're
trying
to
manage
the
key
vault.
Has
you
know
a
great
set
of
security
features
for
making
sure
your
secrets
don't
end
up
going
where
you
don't
want
them
to
go
and
helping
you
manage
that
so
key
ball
is
great.
A
If
you're
not
interested
in
using
key
vault
for
development
scenarios,
you
can
certainly
use
the
user
secrets
feature
that
we
have
in
asp.net
core
to
make
sure
that
you
don't
accidentally
check
secrets
into
your
source
code.
It's
not
really
a
like
an
encrypted
secret
store.
It's
just
a
way
to
store,
have
a
layer
of
indirection,
so
you
don't
accidentally
put
things
like
passwords
or
connection
strings
directly
in
code
that
end
up
on
github.
If
you're
running
on
Azure
app
service,
you
can
use
things
like
environment
variables
for
for
storing
secrets.
A
Those
are
Santa
box
so
that
they
only
stay
within
that
environment,
but
still
I
would
highly
recommend
using
something
like
key
both
if
you
have
a
very
sensitive
data
and
that's
pretty
much
it
we're
any
getting
to
the
end
of
time.
Thank
you,
everyone
for
for
watching
this
session.
If
you
have
additional
questions
or
feedback
about
these
features,
please
let
us
know
by
filing
issues
on
github.