►
Description
No description was provided for this meeting.
If this is YOUR meeting, an easy way to fix this is to add a description to your video, wherever mtngs.io found it (probably YouTube).
A
Supervision
who's
here,
who's,
usually
your
adult
supervision.
Well,
it's
a
combination,
there's
so
normally
there's
so
you
know
it's
a
man
in
its
cot,
but
normally
it's
a
they're
like
no.
No,
no
don't
do
that.
You
know
and
then
oh
wait,
you
know.
So
it's
not
always
helpful
adult
supervision.
Okay,
all
right!
Let's
see
if
it's
good
I
think
every
time
that
I
have
done.
This
had
spent
the
two
of
us,
alright
cool
and
we're
live.
We
have
two
viewers
already
snow,
smashing
success.
A
Alright,
now
I
do
a
thing
on
the
Twitter's
and
then
let's
actually
make
sure
that
what
are
we
sharing
actually
here,
we're
sharing
your
desktop
yeah.
So
that's
kind
of
boring
I
mean
for
now
sure
it's
gonna
get
its
gonna
get
real,
though
it's
your
well.
So
this
is
confusing
for
me,
I'm
normally
in
San
Diego,
and
this
normally
here,
yes,
but
I'm
still
here,
but
we're
sharing
from
my
desktop,
but
normally
what
I
don't
even
know
what
we
did
last
time,
yeah
whatever
somebody
yeah
just
go
with
it,
so
Sam
VP
summit
this
week.
A
So,
let
me
see
I
am
going
to
need
to
watch
the
chat
here
and
see
what
people
are
saying.
As
far
as
first
of
all,
this
is
kind
of
maybe
feedback.
No,
it's
not
okay,
I
need
to
watch
and
see.
If
people
are
saying
we
can't
hear
you
this
there.
It
is.
This
is
gonna
pop
up,
so
I'm
John
Galloway,
that's
Ryan,
Ryan
Holcomb,
a
developer
on
the
a
subpoena
team
and
recent
Fame
of
you
showed
the
HTTP
client
helpers.
A
There's
one
thing:
yep
did
you
show
another
demo
I
was
with
I
was
with
my
friend
Xavier
talking
about
razor
in
class
libraries,
alright
and
I'm
here
today
to
talk
about
improvements
to
API,
authoring
and
general
sort
of
back-end
stuff.
So
we
have
for
you
and
2.1
cool
and
we
see
people
showing
up.
Can
you
tell
us?
Can
you
hear
us?
Okay,
somebody
on
the
chat
just
say:
no
I
can't
hear
you
or
be
truthful.
Okay,
audio
and
video
is
super
okay.
A
So
what
we're
going
to
do
is
I'm
going
to
go
to
the
Twitter's
I'm
going
to
tweet
that
this
is
live
then
will
pretty
soon
after
that
switch
over,
and
you
can
just
show
us
with
all
right.
Guy
sounds
good
so
today,
just
trust
me
I'm
tweeting
now,
which
is
exciting,
I,
know
the
lodge
okay,
it's
so
slow.
A
Well,
as
I'm
doing
this
yeah,
how
big
is
the
team
like
you're
you're,
talking
about
Web
API
features,
yeah,
that's
right
and
just
for
context
cuz.
It
always
blows
my
mind.
How
big
is
the
group
of
people
that's
working
on
this
stuff,
so
the
group
of
people
for
MVC
and
I'll,
say
I'll,
say
MVC
and
Razer.
All
up
is
I,
think
maybe
seven
people,
maybe
six
people
and
and
about
a
hat
and
a
half
of
us,
are
full-time
on
Razer,
okay.
A
So
the
group
of
people
for
ASP,
a
core
MVC
everything
that
has
an
MVC
in
the
nan
is
really
when
you
take
out
Razer
more
like
four
people,
okay,
and
so
the
features
that
we're
showing
today
are
things
that
were
worked
on
by
by
two
people,
including
including
myself,
all
right.
Well,
so
awesome,
okay,
so
I
guess
so
we
do
not
have
Community
Links
for
this
week.
I'm
running
back
and
forth
between
this
and
the
summit
and
I
want
to
do
them.
Justice,
so
they'll
be
on
next
week.
So,
let's
jump
over.
A
Let's
just
share
your
screen.
Okay,
let's
go
for
all
right.
So
let's
do
some
magical
things!
I'm
going
to
switch
to
this
and
say
present
to
everyone.
Okay,
there
we
go
I,
see
I,
see
myself
on
the
screen.
I
see
my
code
on
the
screen.
I
think
you
see
my
code
on
the
screen,
yeah,
so
cool,
so
I'm
gonna
start
off
by
just
showing
showing
an
application.
I
hear-
and
this
is
an
API
application.
A
This
is
some
code.
I
wrote
a
while
back
that
took
a
swagger
sample
and
converted
it
to
asp.net,
and
we
use
this
wheezes
as
per
test.
Okay,
so
it's
kind
of
naive
code
and
it
was
kind
of
written.
You
know
for
my
own
happiness
and
to
meet
my
own
purposes
to
to
roughly
make
a
really
a
really
small
API.
That's
part
of
a
swagger
sample,
okay
and
did
to
go
back
just
a
bit.
Swagger
is
kind
of
it's
a
way
of
defining
an
API,
oh
sure,
so
swagger
swagger
has
been
renamed.
It's
called
open
API.
A
Now
the
v3
of
it
is
called
open,
API.
Okay,
what
I'm,
showing
here
today
is
using
the
swashbuckle
project,
which
is
a
community
project
which
has
support
for
swagger
/,
open,
API,
2.00
kind.
It's
a
spec
for
documenting
api's,
okay
for
REST,
API
s--,
and
what
you
should
be
able
to
see
on
your
screen
right
now,
I'll
make
it
a
little
bit
bigger
is
this?
Is
the
swagger
UI?
Okay?
So
the
swagger
UI
is
a
third
party
JavaScript
HTML
sort
of
Rijo
stable
content
pack
that
provides
an
icy
API
for
looking
at
and
testing
swagger.
A
If
we
dive
in
here
to
my
startup
code,
you
can
see
this
is.
This
is
coming
from
the
swashbuckle
library
I'll
give
a
shout
out
real,
quick
to
you,
the
package
name.
I
know
this
has
been
blogged
about
lots
of
places.
I've
talked
about
before
it's
right
here:
swashbuckling,
an
SPF,
Corps
and
I'm,
using
the
weight.
I
think
what
I
think
is
the
latest
release
so
talk
about
lots
of
places,
but
just
in
case
you
haven't
seen
it.
A
A
Is
this
page
we're
looking
at
correct
and
I'm
gonna
go
kind
of
quickly
through
this,
because
I
feel
like
it's
been
talked
about
in
a
lot
of
places
already,
if
you
have,
if
you
have
questions
about
swagger
or
about
swashbuckle,
you
know
I'll
be
happy
to
take
this
too,
but
I'm
gonna
assume
that
you
know
this
has
been
talked
about
lots
of
places
and
you
can
hopefully
get
a
sense
for
it
if
you
haven't
seen
it
before.
This
is
Jason
file.
A
Speaking
of
that,
by
the
way,
my
code,
my
code
for
this
I'm
just
gonna
show
it
quickly
is
on
github
Rhino,
our
MVC
demos.
This
is
the
only
thing.
That's
there
right
now.
So
if
you
want
to
browse
this
code
and
follow
along
or
check
it
out,
play
with
it
yourself,
because
you
want
to
mess
around
with
swashbuckle,
it's
all
it's
all,
yet
it's
all
public!
A
So
so
getting
back
to
this
I've
got
the
swagger
UI
for
this
API,
which
is
kind
of
a
nice
way
to
look
at
what
the
code
is
that
I
have
in
this
project.
So
you
can
see
I've
got
a
get
by
ID
method.
Here,
I've
got
a
delete
by
ID
method.
Here,
I've
got
some
sort
of
search
methods
here
and
I've
got
post
to
update
and
post
upload
an
image,
something
that
I
need
to
remind
people
and
and
I've
made
this
mistake
too.
This
is
going
against
your
life
database
right.
This
is
delete.
A
A
It's
kind
of
a
sideshow
to
what
we're
talking
about
today,
but
if
I
put
in,
if
I
put
in
an
ID
here
and
I
say
execute
its
gonna,
take
you
think
about
it
a
little
bit
and
it's
going
to
show
you.
This
is
roughly
the
command
that
it
would
execute
if
you're
on
a
you
know
a
POSIX
system
which,
by
the
way,
curl
is
actually
now
included
in
Windows.
That's
right,
windows,
insider
bits,
right,
I,
love
that
so
yeah
and
then
you
can
see
the
requests
the
request
URL
here.
A
So
this
is
the
URL
that
it
would
actually
would
have
hit.
We
grab
this
URL
and
we
do
the
same
thing.
You
can
see
we're
going
to
get
the
case
in
here,
and
then
you
can
see
the
actual
request
body
that
came
back
as
long
as
as
well
as
some
matter.
So
you
can
see
with
this.
This
does
the
authentic
thing
right,
yeah!
Oh,
this
is
cool.
I
like
the
swagger
UI
is
a
good
way
to
just
test
an
API
or
just
kind
of
see.
A
What's
there
and
the
the
one
thing
that
I'm
doing
here
that
you
probably
wouldn't
you
know,
would
want
to
know
if
you
want
to
do
it,
this
way
is
I
haven't,
set
up
to
serve
the
swagger
UI
from
the
root
of
the
site.
Okay,
so
that's
what
the
sprout
prefix
equals
empty
string
does
just
puts
it
at
the
root.
Got
it
okay,
it's
the
one!
That's
like
the
one
thing
that
I've
done
here
and
other
than
that
just
to
clarify
white.
Why
did
you
do
that?
Oh
just
so,
when
I
have
five,
it
comes
up.
A
Okay
makes
sense.
It's
it's
a
little
more
meaningful
I
use
controller
right
when
you're
building
out,
specifically
the
only
job
of
this
site,
is
an
API
back-end.
So
you
just
want
to
see
that
UI
right
off
the
bat
for
testing
its
retro
test
it
for
testing,
especially
right
like
if
you
I,
you
know
you,
probably
you,
may
or
may
not
choose
to
serve
it
in
production.
If
you
did
serve
it
in
production,
you
might
want
to
give
it
a
different
URL.
A
Okay,
that's
the
one
customization
that
I
made
and
so
other
than
that
here
you
can
see
that
this
looks
like
pretty
bog
standard,
pretty
bog
standard,
MVC
code,
pretty
regular
stuff
right
so
but
I,
but
I
promise
we're
going
to
talk
about
new
stuff
right,
so
I've
got
I've
got
some
old
code
here
that
I
wrote
a
long
time
ago
in
kind
of
a
naive
way
based
on
somebody
else's
sample
and
I
want
to
talk
about
a
couple,
a
couple
things
and
a
couple
problems
with
it.
So
one
problem
with
this
is
I'll.
A
Take
this
fine
bye
status,
end
point
here:
I've
got
this
string
status,
which
is
a
required
parameter
mm-hmm,
and
you
can
see
it's
not
in
the
route.
So
in
theory,
it's
going
to
come
from
the
query
string
yeah.
So
if
we
flip
over
to
our
swagger
UI,
you
can
see
that
we've
indeed
figured
out
that
it's
going
to
come
from
the
query
string
and
let's
well,
let's,
let's
try
it
out.
A
So
something
something
that
I
don't
like
about
this
is
that
it
let
us
put
in
a
null
status
yeah
and
we
got
a
404
and
like
that,
probably
shouldn't
be
allowed
so
like
what
you
would
normally
want
to
do
here
would
be
like
I
want
to
validate
that
the
status
was
actually
provided
right.
So,
okay,
so
let's
do.
If
you
know
string,
is
null
or
empty
status
and
we'll
say
return.
New
bad
request
result
cool.
A
A
Great,
so
we're
coming
back
down
to
find,
buy
status,
try
it
out
and
we'll
just
say,
execute
with
an
empty
string
and
now
cool.
We
get
a
400,
but
it
doesn't
really.
That's
not
amazing.
It
doesn't
really
tell
you
what's
wrong.
Alright,
if
you're
there's
a
third
party
API
that
you're
consuming,
you
would
hope
that
it's
actually
going
to
tell
you
something
so,
okay,
what
will
we?
What
would
we
do
about
this?
A
A
Validation,
attributes
on
parameters,
hello,
right,
they've,
never
been
a
thing
in
MVC,
yeah,
oh,
come!
They
are
a
thing
now,
okay,
so
you
can
now
put
validation,
attributes
on
parameters,
so
we
can
do
the
familiar.
We
do
the
familiar
thing
here
if
you
written
MVC
applications
before
you've
probably
seen
this.
So
if
model
state
is
not
valid,
we
want
to
return
bad
requests
and
we
can
do
one
other
trick
here
that
you
can
do
with
model
state.
This
is
not
new
by
the
way.
A
A
Oh
no
I
did
the
wrong
thing,
though:
okay
I
clicked
on
the
wrong
browser.
So
let's
go
back
to
find
my
status.
Try
it
out
empty
status,
cool
status.
No!
This
requires
what
you
got
it
right
now
now
you
can.
You
can
do
something
with
this.
So
that's
nice
that
that's
that's
automatic.
We
have
a
question
here,
they're
asking
if
we
could
do
name
of
status
where
that
was
a
bit
for
model
state
yeah.
Yes,
you
could,
if
you're
talking
about
the
example
where
I
manually
added
stuff
to
model
state-
yes
good
right.
A
So,
let's,
let's
show
something
else.
That's
kind
of
in
this
vein,
so
I've
got
a
oh
and
the
other
thing
I
want
to
mention
about
this.
This
new
behavior
to
do
attributes
on
parameters,
validation,
attributes
on
parameters
is
part
of
the
2.1
feature
set
right.
Okay.
So
this
is
part
of
the
thing
where
you
say
I
want
to
opt
into
those.
Yes,
okay,
so
in
preview
one,
the
validation
attributes
on
parameters
was
not
control
is
not
controlled
by
compatibility
switches.
Okay,
it
is
likely
that
it
will
be
when
we
actually
release
it.
A
So
that
is
what
that
is
something
we
would
consider
breakage
on.
These
are
the
kinds
of
things
that
we
think
about
when
we,
when
we
have
features,
is
if
we
could
break
somebody's
working
code
when
we
had
a
feature,
that's
still
very
change.
Okay,
so
because
of
this,
I
have
to
go
into
configure
services
and
I
opted
into
compatibility
mode.
This
sets
compatibility
mode
for
everything
in
MVC
right.
It's
like
it's
a
toggle
any
I'm,
not
opting
in
at
a
feature
level:
yeah,
okay,
yep.
A
So
this
is
something
where
I
would
want
to
take
advantage
of.
These
new
features
I'd
want
to
test
it
and
then
I'd,
say
and
and
that's
when,
like
if
I'm,
not
until
I've
tested,
it
made
sure
all
this
stuff
works,
I'm
not
going
to
flip
that
tog
on
my
code,
sure
they
working
yes,
and
this
separates
your
ability
to
upgrade
the
platform
and
the
libraries
from
your
ability
to
choose
new
behaviors
got
it
okay.
A
Now
the
other
thing
about
this
is
and
I
haven't,
talked
about
compatibility
switches
on
this
show
before,
but
I
think
we've
I,
think
I'll
post
about
it
is
gone.
Live
compatibility,
switches,
change
the
defaults.
They
don't
want
to
write
your
settings,
okay,
so,
for
instance,
if
you
wanted
to
turn
something
off,
you
can
still
turn
okay.
However,
we
introduced
compatibility
switches
when
we're
building
a
better
version
of
something,
and
so
we're
not
going
to
keep
the
old
behavior
around
forever.
A
It's
to
help
you
transition
okay,
so
it's
almost
kind
of
like
the
old
behaviors
deprecated,
so
you
so
you're
saying
right
like
for
right
now,
I
need
to
opt
in,
but
in
the
future,
some
of
those
old
behaviors
may
end
may
start.
So,
assuming
that
we've
done
a
good
job,
the
plan
is
for
everything
that
we've
introduced.
A
compatibility
switch
for
that
to
become
the
default
in
3.0
and
the
old
behavior
to
be
removed,
got
it
okay,
and
these
are
mostly
cases
like
the
blog
post,
explains
in
more
detail.
A
There
are
mostly
caches
cases
where
there's
a
serious
design
flaw
or
a
serious
bug
or
adding
a
new
feature
that
we
think
most
people
are
going
to
want.
Has
a
small
risk
of
breaking
a
few
people
got
it
and
validation.
Attributes
on
parameters
is
another
case.
We're
adding
a
new
feature
that
we
think
everybody's
going
to
want
is
going
to
break
a
few
people.
Okay,
so
that's.
Why
that's?
A
A
Yes,
this
is
all
validation,
support
for
parameters.
It's
not
just
it's
not
limited
to
require
to
attribute
to
x86
cowboy,
and
we
will
get
to
you
and
to
to
to
geeky
Sacramento
I'm,
not
super
familiar
with
that.
We
don't
we
don't
control
the
language,
syntax,
okay.
So
if,
if
there's
something
interesting
there,
let
us
let
us
know
in
so
geeky
Sacramento
that
the
question
there
is
same
required
fields
for
both
and
and
as
you're
saying
right
and
that's
not.
We
don't
come
up
with
like
we
implement
those
features,
but
yeah.
A
We
don't
create
yeah,
we're
this
required
and
all
these
data
annotation
attributes
or
things
that
have
been
around
for
for
a
long
time.
So
you
can
see
this
is
this.
Is
an
old
system
component
model
being
annotations
thing?
That's
been
around
for
a
really
long
time.
The
other
thing
about
these
is
that,
like,
like
most
things
in
MVC,
there's
an
underlying
object
model
and
conventions,
and
you
can
write
conventions
that
apply
validators.
You
can
write
conventions
that
do
all
these
things.
If
you
don't
like
it,
it's
mostly
customizable
drug.
A
So,
let's,
let's
dive
into
another
example
of
something
that's
been
improved
and
I'm
only
going
to
show
the
new
behavior
with
this
to
save
time.
So,
let's,
let's
update,
let's
update
a
thing
here
so
okay.
So
this
is
a
post
operation
and
you
can
see
it
knows
the
model
type.
So
it's
generated
some
sample
data
for
me,
let's
just
let's
just
mess
it
up,
let's
just
let's
just
totally
mess
it
up,
Oh
boom.
So
this
has
given
us
a
500
yeah,
which
is
not
good
right
right
and
the
reason.
A
Why
is
that
we've
gotten
in
here-
and
this
is
unfortunately
the
HTML
yeah
err
experience,
but
there's
a
there's
a
null
check,
there's
a
null
check
in
here
somewhere.
So
you
could
see
if
we
you
had
some
required
things.
So
if
we
try
this
again
oops,
I
refresh
my
page
instead
of
sending
the
request
again,
let's
mess
this
up
again
make
something
that
doesn't
make
sense
here
execute
you
can
see
that
we've
gotten
here
with
an
OLE
yeah
model
couldn't
buy
and
it's
gonna
blow.
It's
gonna
blow
up
right,
yeah.
A
Request
model
state
and
if
we
fire
this
up
again,
what
you're
gonna
see
here
and
you'll
have
to
you'll
have
to
to
some
extent
ticket
on
faith.
For
me,
which
may
not
be
worth
a
lot,
but
we
have.
We
have
improved
the
error
messages
for
this,
so
by
default,
if
you're,
using
the
ought
to
do,
try
doubts
if
you're
using
the
two
point,
one
compatibility
mode.
A
We
now
have
much
higher
fidelity
of
error
messages
that
come
from
Jason
now
so
in
the
past,
you
would
have
seen
something
like
error:
invalid
input,
okay,
yeah
now
it's
giving
you
this
tells
me
exactly
how
to
fix
yeah
right.
It
says
invalid
character
after
pressing
property
name
line
four
position,
seven,
that
is,
you
know
right
here,
yeah,
so
that
helps
a
lot
we
didn't
give.
We
didn't
give
good
error
messages
before
it
would
just
say
you
know:
data
was
invalid
or
something
something
stupid
like
that.
A
It's
now
it's
not
much
better,
and
it's
it's
also.
It's
returning
it
in
adjacent
document.
Instead
of
after
the
big
HTML
things
yeah.
Well,
that's
the
difference.
That's
the
difference
between
a
totally
unhandled
request
and
successfully
with
Ryanair
okay
on
the
web
and
in
an
api
air
is
a
part
of
your
programming
model
and
it's
part
of
the
demand
you
have
to
be
prepared
to
successfully
communicate
about
errors
cool.
A
So,
let's,
let's
look
at
one
other
thing
here
and
I
want
to
I
want
to
go
back
to
the
swag
earnest
about
this
a
little
bit
here.
So
you
can
see
that
this
method
and
we're
going
to
try
this
out
again,
let's
put
in
for
execute
just
choosing
at
random.
You
can
see
that
we
got
some
JSON
content
here
for
pet
information.
You
know
it's
a
lion.
Who's
had
his
vaccinations.
A
He's
got
a
tag
of
tag,
one
great
sample
data
here
and
you
can
see
that
it's
it's
JSON
data
and
it's
it
seems
to
roughly
match
this
Pat
model,
but
the
swagger
information
doesn't
really
give
you
a
lot
of
joy.
It
doesn't
really
tell
you
what
to
expect
yeah
and
the
way
that
we
would
have
the
way
that
we
would
have
solved
this
in
the
past
is
we
would
have.
A
So
we've
we've
done
something
a
little
different
for
two
point:
one.
Okay,
so
I
want
to
introduce
to
you
all
action
results
of
T,
so
you
now
have
action
results
of
pet
and
it's
a
class,
not
an
interface,
because
there
are
no
conversions,
two
interfaces,
illicit
conversions,
two
interfaces
and
what
action
results
of
T
enables
you
to
do
is
first
of
all
anywhere
you
use
action
results.
All
of
our
action
results
are
convertible
to
action
results
of
T
for
any
key
okay,
so
you
can
just
return
pet
yeah.
A
Okay,
second
of
all,
T
is
convertible
to
action.
Result
of
T,
okay
and
T
converts
to
object.
Result
of
T.
Look
so
anywhere
that
you
were
using
like
okay
pet
before
this.
This
these
two
lines
of
code
are
the
same.
I
see:
okay,
you
just
returned
pet.
You
don't
need
a
left,
yeah,
okay,
so
the
this.
This
helps
in
cases
where
people
fall
off
would
fall
off
a
complexity
cliff
in
the
past,
because
imagine
imagine
that
you
were
starting
with
this.
This
is
common
right.
A
A
Okay,
but
now
this
doesn't
compile
yeah
yeah,
but
now
you're
handling
those
conversions
yeah,
so
action
result
of
T
is
something
that's
convertible
from
both
T
and
R,
built
in
action
result
types:
okay
and
I'm
missing
a
trace
here,
which
is
complaining.
So
if
you
look
at
the
definition
of
this
guy
I
keep
forgetting
my
phone.
Some
people
are
already
happy
about
that
on
the
chat.
That's
cool,
that's
cool!
So
if
you
look
at
this
guy,
you
can
see
it's
got
constructors
and
it's
got
these
implicit
operators.
Okay!
A
So-
and
you
can
you
can
you
know
it's
just
boilerplate
code
like
there's,
never
any
value
you're
adding
to
that
you're.
Just
mechanic
compiles
yeah,
there's.
Also
this
new
I
convert
to
action
result
interface
that
we
added
as
part
of
infrastructure
in
here.
So
you
in
theory
could
return
anything.
You
want
that
converts
to
an
action
result.
One
change
that
we'll
probably
do
for
preview,
2
and
Beyond
is
we'll
probably
make
this
a
sink.
Okay,
so
that
you
can
return
anything
that
asynchronously
converts
itself
to
an
action
result.
A
A
So
task
action
result
a
pet
yeah,
like
it
cleans
up
all
the
rest
of
my
code,
but
they
kind
of
nested
has
its
is
there
any
I
mean
it
almost
makes
me
wonder
if,
like
a
task
action
result
of
type
patters
that
you
know
funny,
you
would
mention
that
we
did
not
get
it
done
for
c-sharp
seven
two,
but
we've
had
some
discussions
about
it.
Okay,
so
there
is
a
language
feature,
that's
required
for
us
to
do
it.
A
If
anybody
is
super
interested
in
the
background,
I
you
know
can
can
share
with
you,
but
the
the
generated
code,
the
generative
code
that
you
get
when
you're
inside
an
async
method
is
going
to
is
going
to
look
kind
of
like
var,
X
equals
dot,
dot
or
sorry,
not
X,
but
t
equals
x,
dot,
dot,
okay
and
T
will
be
whatever
there
were.
The
task
return
type
is
so.
The
problem
is
that
in
the
generated
code,
this
is
always
I.
Action
result,
okay,
and
so
basically,
yes,
we
understand
the
concern.
A
A
language
feature
is
needed
in
order
for
a
sink
to
be
able
to
do
the
right
thing
in
this
case,
which
is
why
we
didn't
do
it.
Oh
god,
we
we
got
there.
We
got
there
right
away
right
because
we
were
saying
well
who's,
the
collar
of
your
controller
method.
We
are
yeah
right
and
we
never
need
to
call
it
on
a
synchronous
code
path
so
like
if
we
we
could
always
await
you.
A
So
why
not
allow
action
result
of
T
to
accept
tasks
of
T
or
tasks
of
action
result,
and
the
answer
is
it
requires
compiler
work
got
it,
so
we
didn't
get
it
done
in
time
for
72
I'm
hopeful
that
we'll
pick
it
up
for
the
next
C
sharp
release
code,
but
that's
the
reason
why
possum
so
I
want
to
go
back
to
this
and
just
sort
of
what
did
we?
What
do
we
do
here?
We
we
improved
fine
by
ID
by
using
actually
resulted.
A
So
you
can
see
now
the
swagger
data
has
the
type
and
the
example
has
all
of
this
information,
because
it
knows
so
typing
right,
aren't
types!
Wonderful,
yes,
I
think!
That's
part
of
I:
why
we're
programming
in
C
sure
yeah?
That's
right!
Something
else
that
we've
done
here.
That's
super!
That's
super
interesting
I'm,
gonna
switch
I'm
gonna
switch
gears
a
little
I
hope,
you're
ready
for
me
to
switch
gears.
Let's
switch
gears
so
I'm
about
to
drop
one
of
these,
not
too
whoa.
Okay,
so
now,
I,
remember
a
peek
API
controllers.
A
A
base
class
before
going
back
away
is
right,
yeah
yeah,
so
we
haven't
done
that.
We've
done
an
attribute.
Let
us
know
if
you
think
the
base
class
is
important
so
with
what
part
of
and
again
I'm
the
dumb
guy
and
the
dumb
questions
for
everyone
else,
so
they
can
say
well
actually
had
that
much
so
way.
A
Back
in
the
day
we
had
controller,
we
had
MVC
controllers,
and
then
we
got
a
P
I
controllers
yeah
and
then,
with
asp
net
core,
we
have
just
a
controller
that
can
be
both
api
mm,
vs,
yeah,
and
so
for
this.
If
I
want
a
case
where
I
have
something
that
is
just
an
API
controller
mm-hmm,
I
can
drop
this
attribute
on
there.
That
does,
I
would
assume
it's
similar
to
previous
api
controller.
So
it
does
it's
not
exactly
the
same
thing.
It
layers
a
couple.
A
It
layers
a
couple
new
things
on
top
of
it
layers
a
couple
new
things
on
top
of
the
existing
controller
surface.
So,
like
we
said
it's
not
a
different
API
surface,
it's
an
attribute,
so
it
composes
with
whatever.
If
you
want
to
by
the
way
you
can
do
this
kind
of
thing
in
MVC,
there's
nothing
magic
about
the
controller
type.
A
For
whatever
functionality
you
want
here,
this
is
now
your
base.
Doesn't
you
don't
need
that
base
class
yeah?
This
there's
nothing,
there's
nothing
magic
about
any
of
the
stuff
that
we
provide
it's
all
sort
of
it's
all
sort
of
decoupled.
So
the
one
thing
that
one
thing
that
makes
your
controller
a
controller
is
controller
attribute.
Okay,
it's
just
usually
hidden
from
you,
and
so,
if
you
look
at
API
controller
attribute
well
API
controller
attribute,
it's
not
causally.
I
can
Florida.
The
other
thing
here
is
this
API
controller
API
behavior
metadata.
A
This
is
this
is
the
thing
that
we
look
for.
So
if
you
have
your
own
dialect
of
attributes
that
do
stuff,
this
is
just
a
marker.
It
just
says:
hey
treat
this
as
api's
cool.
So
what
this
power
is
up,
what
API
controller
attribute
powers
up?
Is
it
powers
up
a
few
things
that
I'm
gonna
show?
So
one
thing
that
powers
this
up
is
or
one
thing
that
this
power
is
up
and
I'm
gonna
I'm,
going
to
start
this
again
to
show
you
is.
A
There's
this
there's
this
parameter
here:
ID
on
fine
by
ID,
which
is
this
method,
and
you
see
how
this
says:
path:
yeah
here,
API
Explorer
in
ferns
this,
because
it's
part
of
the
route
pattern,
but
there's
nothing
in
the
code
that
actually
forces
that
to
be
the
case
unless
you're
using
API
controller,
okay,
API
controllers,
well,
yeah,
I'm
gonna
turn
that
so
we've
added
a
we've
added
the
new
convention
for
how
parameters
are
mapped
to
our
metadata
and
and
we
call
binding
source
attributes.
So
we
have
attributes
like
from
route.
A
So,
if
you
put
from
route
on
something
API,
Explorer
is
going
to
infer
from
route
and
the
runtime
will
enforce
from
route
yeah.
Okay,
whereas
if
you
put
from
query
this
is
now
from
query
and
the
runtime
will
enforce
that,
it's
only
going
to
come
from
the
query
string.
Okay,
so
if
you
were
to
say,
have
this
other
parameter
here?
Oops.
A
Then
this
could
come
from
query
string
or
it
could
come
from
the
route
right
and
it
it
would.
It
would
work
with
either
case
all
right,
whereas
from
route
it's
only
from
the
route
from
route,
it's
only
from
the
route
we
got
it.
So
the
the
point
is,
is
that
if
you
didn't
have
this-
and
this
is
an
MVC-
this
is
an
MVC
ism
right.
Mvc
is
very
flexible
about
what
it
accepts
and
where
it
reads,
data
from
which
is
intent
intended
to
make
you
as
productive
as
possible.
When
writing
browser-based
applications
right
for
API.
A
Is
it's
not
a
great
idea
to
be
flexible
about
your?
You
want
to
be
very
data
sources.
You
want
to
be
locked
down
as
far
as
yeah
you
want
to.
You
want
to
know
what
you
expect
people
to
do
and
provide
clear
guidance
about
how
consumers
can
use
your
API,
whether
or
not
it
comes
from
the
query
string
or
the
URL
path
is
part
of
the
contract,
yeah
or
the
body
right
yeah.
So
the
general,
the
general
sort
of
thing
that
that
API
controller
adds
with
respect
to
parameters.
A
Yeah
is
we
have
inference
rules
now
around
parameters
and
their
data
sources,
so
this
this,
you
know,
couldn't
be
the
case
because
it's
a
get
action,
but
it
works
kind
of
like
this.
You
have
to
use
your
imagination
here
with
me.
So
complex
type
parameters
are
inferred
to
be
from
body.
Okay,
anything
in
the
any
any
parameter
name
that
matches
a
parameter
and
the
route
template
is
inferred
to
be
from
route,
and
anything
else
is
inferred
to
be
from
query
okay.
A
So
it's
a
set
of
restrictions
and
sort
of
like
refinements
around
the
default
model.
Okay,
but
if
you've
ever
been
in
the
situation
before,
where
you've
like
forgotten
to
put
from
body
on
something
or
felt
like
putting
from
body
on
a
bunch
of
posted
methods,
is,
is
tedious.
Well,
we
have
a
feature
for
you:
it
in
furs
in
furs.
What
we
think
you're
likely
to
do
anyway
for
your
first,
what
you
think
that
you're
likely
to
do
anyway
for
the
parameters
of
your
API
actions?
A
Okay,
alright,
so
so
so
did
the
TLDR
on
that
high-level
is
a
controller
like
has
binding,
has
some
conventions
at
work
with
both
NB
c--
serving
HTML,
and
it
works
with
api's.
By
dropping
this
attribute
on
you
like
or
more
strict
with
your
api,
binding
and
stuff
you're,
sacrificing
a
little
bit
of
flexibility,
which
may
not
actually
be
a
sacrifice
at
all.
If
you're
writing
an
api
in
order
to
get
things
to
be
sort
of,
we
hope
it
fits
like
a
glove
yeah.
We
hope
that
item
bench.
A
A
Not
you
don't
have
to
guess
about
what
we
intend
round,
but
any
feedback
that
you
find
about
things
that
you
don't
expect
to
work
is
is
gonna
be
helpful
to
us:
okay,
cool
yeah,
so
you
heard
that
get
your
feet
back
in
now
test
it
try
it
out:
yeah
cool
yeah.
So
a
couple
of
questions
here,
so
some
michael
says
he
thinks
the
base
class
is
valuable,
dane
says:
basic
api
context
is
faster
or
less
memory.
It's
not
a
customization
of
EF
dane.
It
is
just
a
standard,
DB
context.
A
A
I'm
not
sure
what
so
I
understand
that
you're
saying
you
want
it
to
come
from,
so
you
want
to
you,
want
to
bind
a
model
from
the
body
and
then
also
bind
a
single
property
from
the
route.
Am
I
understanding
that
correctly,
the
class
so
I'll
answer
I'll
answer
anyway,
if
I'm
understanding
that
correctly,
you
will
still
have
to
perform
gymnastics.
This
feature
will
not
help
you.
If
it's
important
that
it
be
a
single
model
object.
We
don't
have
anything
that
will
help
you
right
now,
I
mean
there's
no
real,
a
convention.
A
That's
going
to
make
that
super
clear,
because
if
you're
pulling
things
in
from
both
the
body
and
the
route,
you
see
what,
if
you
have
a
conflict,
how
do
you
merge
that
stuff
together,
yeah
we've
considered
we've
considered
designs
that
do
that
sort
of
thing,
but
we
haven't
ever
felt
like
it
was
important
enough
for
mainline
enough.
We
tend
to.
We
tend
to
focus
on
the
things
that
we
would
tell
everybody
to
use,
and
it's
not
clear
why
we
would
tell
everybody
to
do
everything
that
way.
A
Okay,
so
so
yeah,
sorry,
I,
don't
have
anything
to
help.
You
with
that
a
couple
other
things
I
want
to
talk
about
here
so
with,
along
with
API
controller,
something
that
we're
doing
in
2.1
that
we're
going
to
be
doing
more
of,
and
we
want
to
know
what
you
think
about-
and
this
is
this
is
an
area
where
we
love
your
input
and
your
engagement.
A
A
So
we
can
sell
so
nobody
else
has
seen
the
chat
adjust,
how
a
kind
of
screen
story
so
NBC
now
has
analyzers
I'll,
make
it
a
little
bit
more
more
central,
so
I'm
talking
about
the
solution,
Explorer
dependency
notes
over
here,
so
we've
got
a
few
that
we're
starting
with
here
we've
got
controller
actions
must
not
have
async
void.
This
is
a
fairly
common
mistake.
A
Asic
void
in
asp.net
will
only
make
you
sad
yeah,
so
it
will
make
you
sad
and
it's
a
mistake
that
we've
all
made
I
made
numerous
times.
Method
was
void
and
I
added
a
sink,
so
we
have
an
analyzer
now
that
will
tell
you
if
you're
doing
something
a
sigmoid
in
the
controller
and
I
think
we
have
an
item
tracking
doing
the
same
for
for
pages
as
well.
So
what
does
that
mean
specifically?
What
is
this
going
to?
Do?
It's
just
a
build
error
as
I
say.
A
So
it's
a
it's
a
it's
a
it's
a
message.
So
if
you
look
in
the
sidebar
over
here-
and
it
might
be
kind
of
hard
to
see,
there's
there's
the
dark,
green,
ok
errors-
and
so
you
can
see
like
here.
This
is
saying:
hey.
You
should
use
action
results
of
tea,
so
I
do
have
a
code
fix
for
this,
but
it
doesn't
work
with
tasks
right
now,
which
is
a
bug
that
I
should
log
and
before
before,
I
get
too
carried
away
with
talking
about
how
great
these
are.
I
do
want
to
point
out.
A
One
thing
about
these
analyzers
are
two
things
about
these
analyzers
three
things
about
these
are
there's
so
many
things
I
want
to
point
out
about
these
analyzers
I'm,
going
to
flip
over
to
the
project
file,
and
you
can
see
Microsoft
asp,
net
core
analyzers,
so
so
there's
a
big
there's,
a
big
zero
one
here
and
I
want
to
be
I
want
to
be
forthright
about
that
zero
one.
This
is
this
is
alpha
quality
stuff
and
it's
work
in
progress
and
we're
throwing
it
over
the
wall.
A
So,
what's
the
impact
of
an
analyzer
bug
sure
I
could
is
that
like,
for
instance,
if
there's
a
bug
in
like
an
identity,
library
or
the
NBC
library,
that's
going
to
have
huge
impact,
it
could
cause
you
to
patch
your
application,
perhaps
or
to
you
know,
rush
to
urgent
security
fixes
or
to
have
a
bill
break
or
test
failures,
bad
things,
the
impact
of
an
analyzer
is
that
you
have
a
squiggle.
Okay,
you
don't
have
some
messages
here,
so
it's
clear.
It's
it's
important
people
understand
these
are
alpha.
A
These
are
new,
like
the
quality
is
alpha
alpha
level
and
you're
still
building
them,
but
yeah
I,
don't
have
to
be
worried
about
like
the
impact
of
a
bug
is
not
it's
not
gonna.
It's
not.
Gonna
shatter
your
world
right.
Okay,
so
like
this
is
a
bug
yeah
right.
This
is
a
bug
that
we
have
where
this
analyzer
thinks
of
the
controller
method
or
the
controller
constructor
is
an
action
method.
A
Oops
yeah
right
so
I
have
a
couple
choices
here:
I
could
remove
the
package
if
I'm
fed
up
with
these
errors
and
I,
just
don't
care
anymore,
you
could
disable
it
in
code
yeah.
You
can
disable
it
in
a
global
file.
If
you,
if
we
have
an
analyzer,
if
you
like
99%
of
our
analyzers
and
there's
one
that
you
don't
care
about,
yeah,
you
can
turn
it
off
for
your
project
or
you
can
turn
off
specific
usages.
If,
if
we're
wrong,
let
us
let
us
know
what
you
think
about
these.
A
It's
definitely
our
goal
that
they're
not
noise.
Yeah
like
this
is
a
mistake.
Right
mistakes
are
not
mistakes
need
to
be
fixed
yeah,
but
it's
our
goal
that
the
analyzers
reinforce
things
that
we
would
recommend
that
everyone
use
yeah
right.
So
there's
a
lot
of
things
that
it's
like
well,
this
this
feature
exists
in
MVC
for
old
reasons,
and
this
feature
has
to
be
there
that
support
the
people
who
want
to
use
it
for
the
things
that
they
want
to
use
it
for.
A
But
we
wouldn't
tell
anybody
to
start
using
it
today,
yeah
right
or
we
wouldn't
tell
anybody
to
use
this
feature
for
this
thing.
Analyzers
are
a
tool
that
we
can
use
to
help
you
get
it
right
yeah.
So
you
can
guide
people
in
the
right
direction,
but
it's
not
going
to
bring
out
a
builder
with
so
like
a
sigmoid
right
like
a
sigmoid
is
always
wrong
from
our
point
of
view.
A
I
can't
say
one
razor
will
provide
errors
at
Build
time
and
that
will
include
analyzers
cool
by
default,
so
the
default
experience
for
razor
is
going
to
be
built
time
with
errors
you
can
opt
out
of
it,
there's
still
runtime
compilation,
but
that
will
be
the
default
into
two.
We've
done
a
lot
to
one
pretty
too,
we've
done
a
lot
of
work
in
Emma's
build
to
make
that
happen.
A
I
mean
the
whole
thing
with
analyzers,
and
you
know
how
layers
on
top
of
all
the
like
they're
built
with
taking
advantage
of
Rosslyn
and
understanding
your
code
and
and
geeky
Sacramento
brings
up
that.
It's
it's
a
stanity,
you
know
for
large
groups
and
architecture
groups.
Yeah
I
was
joking
about
this.
Just
yesterday
with
Nick
Craver
who
works
at
Stack
Overflow,
and
he
works.
He's
part
of
code
group
used
for
a
lot
of
code.
A
All
the
time
and
they've
actually
created
analyzers
on
this
team
that
are
just
things
that
piss
off
Nick,
and
so
they
just
all
install
this
thing
before
they
admit
they
just
don't
make
these
errors
anymore.
It's
you
know
it's
very
good
yeah.
So
it's
really
pretty
smart
to
like
what
I'm
picturing
here
is
these
analyzers
you're
building
are
really
useful,
but
also
I'm
gonna.
Take
a
look
at
these
and
use
these
for
my
own
analyzers
too,
which
is
which
is
cool
so
with
with
the
analyzers
back
to
the
few
things.
I
wanted
to
point
out.
A
So
these
are
alpha
quality
we've
implemented
the
few
things
that
we
think
may
be
useful.
There
are
more
things
that
we
think
are
useful
that
we
haven't
done.
If
you
have
ideas
or
you
want
to
contribute
code,
talk
to
us
about
it,
go
to
the
MVC
repo
log
issue.
You
start
a
discussion
tin
use.
Is
there
like
a
label
or
is
there
a
way
to
filter
down
what
those
analyzers
are?
Okay,
so
it's
just
in
the
MVC
over
here
I
would
I
would
actually
I
like
the
idea
that
you're
going
for
years.
A
So
if
we
go
issues
and
we
search
for
analyzer
I,
don't
know
I,
don't
know
if
we
have
a
tag
for
it
or
not.
I'm,
just
gonna
I'm,
just
gonna
check
real
quick.
So
there's
a
bunch
of
things
that
say:
analyzer,
ok,
so
you
can
see
that
there
are
some
places
where
it's
been
talked
about.
If
the
bug,
if
the
bug
sounds
like
create
a
new
analyzer
to
warn
users
about
HTML,
the
partial
yeah
and
it's
in
2.1
preview,
1
or
preview,
that's
and
it's
assigned
to
print
off.
That's
something!
That's
going
to
happen!
A
Yeah
right
I
mean
we're.
We're
loosely
committed
to
doing
that.
So
anyway.
My
point
being
that
if
you,
if
you
have
feedback
about
this
or
you
want
to
see
what
we're
thinking
about
you
say,
issue
tracker
also
with
this
drop
to
the
command
line
here,
this
is
going
to
be
little
text,
but
hopefully
you
can
see
it.
So
the
analyzer
package
is
not
on
you.
Get
it's
not
going
to
be
on
you
get
soon.
I!
Don't
think!
A
Ok,
because
we're
considering
this
alpha
quality,
the
other
nice
thing
about
analyzers
is
that
they
can
be
version
independent
because
they
don't
have
to
be
versioned
along
with
the
libraries,
so
the
analyzers
can
kind
of
keep
chugging
along.
They
don't
have
to
be
tied
to
release
so
the
thing
you're
showing
there
is
that
it's
not
in
the
nougat
feed.
This
is
in
the
my
get
feed
kureta,
which
is
where
kind
of
alpha
and
early
and
nightly,
and
those
kind
of
packages
correct.
A
So
if
you
go
to
dotnet
my
get,
if
you
just
want
to
look
at
what's
there
and
you
look
at
it's
been
at
dev,
the
feed
called
it's
been
a
core
dev.
That's
it
you'll
find
the
analyzer
package
here
and
I
would
suggest
at
least
sort
of
to
start
with
there's
a
few
of
them.
We
also
have
one
for
logging,
which
verifies
the
format
of
your
log
strings.
A
So
you
don't
have
syntax
errors
and
your
long
Stearns
now
I
would
recommend
this
grabbing
this
ASP
Nagor
analyzers
package
and
actually
using
a
star
wildcard
for
it,
so
that
when
we
update
it,
you'll
get
new
stuff
or
how
you
can
keep
giving
us
feedback
about
it.
So
we
were
talking
earlier
about
web
api
in
general
or
their
analyzers
that
are
specific
to
web
api
or
the
earth
is
just
kind
of
a
collection
of
analyzers
all
web
service.
So
so
this
package,
nightcore
MVC
analyzers,
will
have
analyzers
all
up.
A
Okay,
we
will
be
adding
more
so
you
can
see
here
here
are
some
common.
Like
log
string
mistakes
that
we
have
analyzers
for
okay,
there,
there
will
be
a
whole
lot
more.
We
think
that
this
is
an
area
that,
where
Microsoft
could
provide
a
lot
more
value
to
people
is
making
mistakes
more
obvious
and
making
it
easier
to
migrate
by
doing
things
like
code
fixes,
but,
like
you
said,
kind
of
more
of
a
gentle
like
guidance
towards
yeah
people,
make
this
mistake
a
lot
we're
not
going
to
break
your
build.
We're
not
get
you!
A
You
can
type
this
if
you
know
what
you're
doing,
but
we
want
to
guide
you
towards
doing
me.
Yeah
I
mean
we
there's
a
certain
quota
we
have
for
showing
up
and
your
your
air
logs.
Now
that
we're
not
breaking
things
every
day.
We
have
to
find
a
way
to
keep
our
presidency
butts
are
an
airless.
So
so
you
can
see
a
couple
analyzers
here,
including
some
that
I
haven't
gotten
to
talk
about
it
here.
So
it
says:
hey
use
after
be
routing
actions
with
API
controller,
actually
do
not
require
model
state
check.
A
So,
for
instance,
another
thing
that
I
haven't
had
a
chance
to
talk
to
you
about.
Is
this
API
controller?
Don't
need
it?
It
will
do
that
by
default
now,
okay,
by
putting
that
API
controller
attribute
on
it's
going
to
get
that
check
yep.
The
other
thing
to
mention
about
the
the
other
thing
to
mention
about
the
the
model
state,
the
bad
requests
data
flow
is
the
what
happens
when
you
do.
Fata
requests
with
model
state
is
customizable.
A
A
That
includes
an
example
of
how
to
customize
what
that
does.
Okay,
so
we
haven't
we're
not
trying
to
lock
you
into
a
specific
way
of
doing
things.
Just
there's
a
there's,
a
there's,
a
mechanism
to
customize
that
that
you
can
override
by
default.
It's
going
to
do
what
a
bad
request
model
state
has
always
done.
Okay,
we
have
a
question
here
from
x86
Cowboys
yeah.
A
If
the
analyzers
move
version
independently
of
the
NBC
version,
are
the
analyzer
smart
enough
to
recognize
and
VC
compatibility
flags
and
version
differences
like
I
action,
result
versus
action
or
Zelda
T,
it's
a
good
question,
so
we're
introducing
it
for
so
so
one
is
yes,
we
can.
We
can
find
that
and
we
can
find
that
in
code
when
we
do
analysis,
so
you
can
look
at
bodies.
I
mean
this
is
looking
at
a
body
here.
A
So
as
long
as
you
know,
the
set
of
API
is
that
you're
looking
for
you
can
do
that
when
the
analyzers
get
too
stable
level
of
quality,
we
might
version
them.
Okay
for
now,
they're
gonna
kind
of
float
so
like
there's
been
this
problem
in
the
past,
with
like
people
trying
to
mix
floating
versions
of
packages
with
stable
versions
of
packages,
yeah
I
guess
so
what
I
wanted
to
express
is
that
the
analyzers
don't
change
what
your
project
references,
so
they
won't
break
your
build.
That
way,
we
may
decide
to
version
them
in
the
future.
A
I
shouldn't
make
promises
that
I
can't
keep
okay
cool
thanks
for
bringing
that
up.
Yeah,
you're
right,
so
I'll,
try
and
answer
Michael
Powell's
question
you're,
saying
it's
just
like
a
pattern
hook
for
resharper
and
I,
don't
think
so,
because
a
pattern
hook
does
kind
of
like
the
pattern.
Matching
and
M
is
the
same
pattern
replacement
that
sort
of
thing
a
code
for
and
the
analyzers
more
actually
using
Roslyn
to
inspect
your
code
right,
and
so
it's
not
kind
of
just
like
doing
a
match.
It's
it's
actually
doing
a
more
of
a
like
code
inspection.
A
A
So
all
knowledge
that
it's
on
us
not
to
bring
you
yeah
I,
would
say
for
the
analyzers
before
they
go
for
the
analyzers
before
they
go
one.
Oh,
you
should
assume
that
they
are
going
to
align
with
2.1
for
now,
okay
right,
but
for
things
like
so
the
reason
why
you
couldn't
use
them
with
earlier
so,
for
instance,
the
API
these
API
controller
analyzers,
like
if
you're
not
into
one,
then
you're
not
using
this
feature.
So
you
won't
see
these
messages.
Okay,
right,
likewise,
ASIC
void
applies
everywhere.
A
Logging
applies
everywhere,
I,
hear
I,
hear
the
concerns
about
I,
hear
the
concerns
about
using
the
analyzers
with
different
versions
of
MVC.
That's
a
good
point:
okay
B.
We
have
to
think
about
that
and
come
up
with
a
come
up
with
a
plan
for
it
cool
right
now.
The
analyzer
stuff
for
us
is
in
is
in
the
like:
crawl
crawl,
not
walk
stage
right
right
so
because
there
are
there
bugs
with
what
we
have.
We
know
that
we're
we're
gonna
work
on
it
more.
A
It's
the
plan
for
these
still
to
ship
with
one
though
it's
it's
not
super
clear.
Okay.
To
be
honest,
it's
I
think
it
depends
on
a
few.
It
depends
on
a
few
things.
It
depends
on
what
level
of
quality
they
get
yeah.
It
depends
on
how
much
time
we
have
to
spend
on
it.
It
depends
on
how
valuable
people
think
they
are
and
it
depends
on
if
we
think
that
there
are
a
lot
of
important
things.
A
Okay
and
like
we
think
that
guidance
is
really
important.
Okay
right,
we
think
that
the
guides
to
use
partial
is,
or
partial
async
over
partial
is
really
important.
So
we
want
to
get
that
out
there
to
people
I
think
what
what
sort
of
motivating
our
decision
is.
How
ready
for
usage
are
these
things
and
it's
possible
that
we
might
split
the
into
like
analyzers
that
we
think
are
ready
to
go
and
analyzers
that
are
experimental,
yeah,
okay,
make
sense.
A
Derek
says
we
need
an
analyzer
to
analyze
the
analyzer
analyzing,
ID
versions,
yeah,
so
so
Eugene
for
your
question.
That
is
how
it
works.
So
the
analyzers
look
for
API
controller
on
this
class
or
in
the
class
hierarchy
mm-hmm,
and
then
we'll
do
the
right
thing
based
on
that,
so
the
analyzer
is
enabled
or
the
behavior
changes,
depending
on
that
API
yeah.
So
if
you
take
so
you
notice,
like
I,
said
this
is
a
bug
right.
It
shouldn't
be
making
noise
about
my
constructor,
but
if
I
take
this
away,
it's
gone.
A
Okay
right
whereas
like
if
I
did
something
like
this,
and
you
should
never
do
this
in
asp
net
right,
you
should
get.
You
should
get
this
message
without
it
being
a
peon
controller.
Okay
can
I
think
resident
this
message.
Sorry,
what
can
you
show
like
in
that
you've
got
that
repo
up
and
what
does
the
code
look
like
for
one
of
these
analyzers,
so
I'm
just
gonna
get
back
to
where
it
was.
A
So,
let's
go
here,
so
let's
start,
let's
start
here
so
this
is
pronounced
on
our
team
by
the
way
has
been
doing
most
of
this
work.
He
is
deeply
passionate
about
this,
and
a
lot
of
these
things
are
things
that
he
just
felt
like
doing
and
spent
some
of
his
own
time
doing
so
kudos
to
him
for
this.
So
this
is
this
is
where
the
project
is
it's
in
our
it's
in
our
repo,
the
MVC,
the
MVC
analyzers,
are
in
the
MVC
repo,
which
I
think
hopefully
makes
sense
to
you.
A
The
sort
of
heart
of
it
right
now
is:
there's
a
base
class
for
there's
a
base
class
for
the
analyzers
that
figures
out
if
it's
a
controller,
okay
right,
so
any
analyzer
that
inherits
from
controller
analyzer
base
is
going
to
apply
to
controllers,
and
you
can
see
the
like.
The
first
thing
that
we
do
is
this:
this
thing
does
some
work
and
it
basically
says:
first,
we
need
to
figure
out
if
it's
a
controller
yeah
and
then
after
that
we
can
do.
A
We
can
do
some
more
work
and
this
will
be
called
on
on
types
and
then
you
can
see
that
there's
another
variant
of
an
API
controller
base
which
is
going
to
do
the
same
thing:
basically
buffer,
API
controller,
okay,
so
you're
not
repeating
that
work
and
all
the
difference.
Yeah
analyzers.
So
let's
look
at.
Let's
look
at
an
example
here
and
I
think
the
Void
one
is
one:
that's
really
easy
to
understand.
A
So
we're
gonna
look
at
both
the
analyzer
and
the
code
fix
the
analyzer,
provides
the
squiggle
and
then
the
code
fix
changes
it
to
the
correct
version.
Okay.
So
this
is
diagnostic
analyzer
for
c-sharp
and
you
provide
a
you.
You
declare
what
a
diagnostic
descriptor
so
diagnostic
descriptor
is
like
think
of
it
as
like
a
format
string
for
the
error
message.
Okay,
so
when
you
come
here-
and
you
say
public
welcome,
you
don't
write
a
asing
boy
cool
and
you
see
this
controller
actions
must
not
have
anything
good.
A
And
then
you
see
that
there's
a
right
here,
MVC
2,
0,
0
1
and
we
see
2001
mm-hmm
right
all
the
way
back
in
2001.
We
know
this
was
bad,
so
that's
important
because
if
you
for
some
reason
wanted
to
suppress
this-
and
you
should
never
do
this-
you
can
suppress
it
with
the
Erika.
So
that's
what
all
this
infrastructure
is
for.
A
So
we
declare
a
diagnostic,
descriptor
and
I
think
that's
in
some
static
class
somewhere
I'm
sure
that
if
people
care,
we
register
a
syntax
note
action
which
just
says
like
hey,
call
me
on
syntax
nodes
and
then
for
methods,
I
think
yeah
down
here.
This
is
the
next
part,
so
we
say
call
me
on
methods
mm-hmm
and
you
can
think
of.
A
This
is
the
method
or
including
the
attributes.
I
believe
this
is
the
method
from
the
compilers
point
of
view,
and
these
will
all
be
children
of
the
method.
So,
okay,
so
we
have
a
method
and
the
the
syntax
is
like
what
what's
the
text
you
typed?
The
semantic
model,
on
the
other
hand,
provides
more
meaningful
information
about
the
code.
So
it's
like
derived
from
the
code
you
typed.
We
figured
out
these
types.
A
Okay,
so
give
the
semantic
model,
get
the
symbol
that
matches
the
method
so
take
the
method,
get
the
matching
symbol,
and
then
we
have
a
utility
method
here
to
say:
is
this
an
action
if
it's
not
an
action
skip
it
and
then,
if
it
is
not
a
sync
or
does
not
return
void,
then
return
and
all
this
stuff
here
this
method
that
is
async
method,
dot
returns
void.
This
is
all
part
of
Roslin's
api.
We
didn't
write
any
of
that.
A
Okay
and
then
here,
okay,
so
we're
going
to
take
the
name
of
the
system,
threading
tacit
type.
Basically,
if
it's
gotten
to
this
point,
it's
an
async
and
it
returns
void.
So
yeah
and
the
rest
of
this
is
just
the
cleanup
right.
We're
formatting
the
error,
message:
okay
and
then
creating
creating
the
actual
instance
of
the
error
message.
I
should
say,
and
then
the
code
fix
for
this
is
going
to
look
pretty
similar,
and
so
the
code
fix
you,
don't
you
don't
need
to
like
rida
TechEd
the
problem,
because
the
code
fix
will
be
detected.
A
A
The
you
give
them
a
lambda
to
change
it
right,
so
it
looks
like
here,
whereas
root
node
context
that
spans
so
context
span
will
be
the
like
location
that
had
the
air
and
in
our
case
the
location
that
had
the
error
is
location.
Where
does
location
come
from
right
here,
so
it's
the
location
of
the
return
type.
So
what
happens
here
is
we're
getting
we're
taking
the
return
type
I
keep
deleting
this.
A
Oh
it's
right
here
we're
getting
the
location
of
this
symbol
in
the
code
and
then
we're
passing
that
through
as
the
location
of
the
error,
so
that
over
here
we
have
to
take
the
location
of
the
code
and
say
all
right.
Given
this
position
in
the
text
find
me
the
syntax
tree,
you
know
that
corresponds
to
that
position
because
I
know
that's
what
I
want
to
change.
Okay
and
then
this
is
just
the
the
work
that
you
need
to
replace
it
with
the
the
declaration
for
system
turning
tasks.
A
A
So
some
of
a
lot
of
the
niceness
that
Roslyn
provides
in
these
things
is
when
you
write
a
code
fix
or
something
like
that,
they
do
a
pretty
reasonable
job,
turning
it
into
code
that
you
might
actually
want
to
see
in
your
project.
Okay,
cool
yeah,
I
apologize
for
taking
you
off
on
that
tangent
I!
Just
thought:
it's!
Alright!
It's
alright!
It
is
interesting
and
that's
actually
the
end.
That's
all
I
got
so
good.
A
Okay,
let
me
so
let
me
drop
us
out
of
these
sharing
of
the
screen
and
awesome
so
for
people
that
that
have
been
watching
or
people
watching
later
now,
as
your
main
kind
of
takeaway
was
now
it's
the
time
to
get
in
try
these
features
out.
You
can
go
to
the
file
bugs
down
the
MVC
repo
or
just
get
in
touch
with
oh
I
mean
we're
here.
Every
week,
ask
ya,
ask
questions
and
there's
a
question
in
the
chat.
Someone
asked
wait:
a
minute,
where's,
Hanselman
and
Damien
reminder
Damien
every
other
Tuesday.
A
So
that's
the
ten
o'clock
ones
Damien's,
not
here,
which
means
we
get
someone
from
the
team
coming
in
and
showing
us
a
specific
feature
and
then,
but
both
Dame
and
hence
men
are
at
the
MVP
global
summit.
That's
a
yearly
thing
where
Microsoft
MVPs
are,
they
all
come
to
Redmond
and
they
get.
You
know,
shown
new
things
and
get
briefings
and
all
kinds
of
stuff.
So
so
that's
where
they
are
yeah
well,
I'll
be
back
next
week,
all
right
great
thanks,
John
I
think
we
can
do
a
dramatic
Zuma.