Thanks for your nice feedback.
My answer to your first question is yes. I would return 404 if a Get API cannot find a resource which basically means that resource doesn’t exist. (e.g. api/student/{school}/{grade}/{id} might return 404). But I always prefer not to only return a HttpStatusCode rather and ActionResult in which I can contain more info.
Your second question about Exception Handling, if I’m coding in .net framework then I would probably write my own global exception handler in which I can produce different types of exceptions (including the user-defined exceptions). And then to register that within the WebConfig.cs
And for your last comment, that’s very true. I never intended to offer complete source code to directly have it in a production environment as that would go beyond the scope of this article.