Cleaning Up Your Controllers
So far, we have been adding attributes to our methods as we go along for each specific use case. However, now our controller is rather unorganized and full of commented out attributes. We can use a couple tips and tricks from attribute routing to clean this controller up.
Once you have written several action methods within a class, you may notice some similar behavior.
You may also want to expand upon the behavior that different action methods can make use of.
So far, we have been adding multiple different
[Route("path")] attributes to each method to get every method to respond to a path that starts with
We also want to use the
Welcome() method to respond to
GET requests and
POST requests, not just one or the other.
Time to DRY our code!
In addition to adding attributes above action methods, we can also add attributes for routing above the class.
When we do so, we are designating class-wide behavior.
HelloController, we want every action method to respond to requests at paths that start with
We can use
[Route("path")] once above the class to designate that every path for each action method needs to start with
Now that we have added that
[Route("/helloworld")] above the class, we can start to modify the attributes we placed above the
Since we want to map
Index() to the path
localhost:5001/helloworld, we removed the
[Route("/helloworld")] attribute above the method.
If we hadn’t, we would have inadvertently mapped the
Index() method to the path,
We want to leave the
[HttpGet] attribute above the
Index() method so we can still specify that
Index() responds to
Now that just leaves us the
One Method, Two Request Types
When we modified the
Welcome() method to respond to a
POST request, we commented out the attributes that we added when we were working with route parameters.
With attributes, we can DRY our code and create one method that can respond to two different request types at two different routes.
Before we begin, we should note that we can add route info directly to
On line 1, we modified the
[HttpPost] attribute to include the end of our path.
Welcome() still responds to
POST requests at
However, this is just the beginning of us DRYing our code.
We also want
Welcome() to respond to
We can modify an
[HttpGet] attribute to do so.
We added a different path to the
[HttpGet] attribute on line 1.
Welcome() can respond to
GET requests at
Welcome() can also still respond to the
POST request at
localhost:5001/helloworld/welcome upon submission of the form.
Now when we run our code, our app will still have the same functionalities, but now we have a more refined and organized code base!
Check Your Understanding
True/False: Routing attributes go below the class definition, but above the method signature.