// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.AspNetCore.Mvc; namespace RoutingWebSite { // A controller can define a route for all of the actions // in it and give it a name for link generation purposes. [Route("api/Company/{id}", Name = "Company")] public class CompanyController : Controller { private readonly TestResponseGenerator _generator; public CompanyController(TestResponseGenerator generator) { _generator = generator; } // An action with the same template will inherit the name // from the controller. [HttpGet] public ActionResult Get(int id) { return _generator.Generate(Url.RouteUrl("Company", new { id = id })); } // Multiple actions can have the same named route as long // as for a given Name, all the actions have the same template. // That is, there can't be two link generation entries with same // name and different templates. [HttpPut] public ActionResult Put(int id) { return _generator.Generate(Url.RouteUrl("Company", new { id = id })); } // Two actions can have the same template and each of them can have // a different route name. That is, a given template can have multiple // names associated with it. [HttpDelete(Name = "RemoveCompany")] public ActionResult Delete(int id) { return _generator.Generate(Url.RouteUrl("RemoveCompany", new { id = id })); } // An action that defines a non empty template doesn't inherit the name // from the route on the controller . [HttpGet("Employees")] public ActionResult GetEmployees(int id) { return _generator.Generate(Url.RouteUrl(new { id = id })); } // An action that defines a non empty template doesn't inherit the name // from the controller but can perfectly define its own name. [HttpGet("Departments", Name = "Departments")] public ActionResult GetDepartments(int id) { return _generator.Generate(Url.RouteUrl("Departments", new { id = id })); } } }