我可以在 ASP.net core 3.0 的 [Route("x/{id}") 中使用变量吗?

Can I use an variable in the [Route("x/{id}") of ASP.net core 3.0?

我正在制作客户仪表板。在此仪表板中,每个客户都有一个或多个联系人。这些联系人有自己的屏幕。要访问该屏幕,我想我会实施一条路线,其中包含所选客户的 ID。现在我必须手动插入 Customersid。我希望它是自动的。我该怎么做?

我的代码:

客户

public CustomerController()
        {
            _customers = new List<Models.Customer>();
            _customers.Add(new Models.Customer { Id = 1, Email = "Test1@gmail.com", Name = "Test1", Password = "Test1"});
            _customers.Add(new Models.Customer { Id = 2, Email = "Test12@gmail.com", Name = "Test12", Password = "Test12" });
            _customers.Add(new Models.Customer { Id = 3, Email = "Test123@gmail.com", Name = "Test123", Password = "Test123" });
            _customers.Add(new Models.Customer { Id = 4, Email = "Test1234@gmail.com", Name = "Test1234", Password = "Test1234" });
            _customers.Add(new Models.Customer { Id = 5, Email = "Test12345@gmail.com", Name = "Test12345", Password = "Test12345" });
        }

        [HttpGet]
        public IActionResult GetCustomers()
        {
            return Ok(_customers);
        }

        [HttpGet("{id}")]
        public IActionResult GetCustomer(int id)
        {
            foreach(var item in _customers)
            {
                if(id == item.Id)
                {
                    return Ok(item);
                }
            }
            return NoContent();
        }

联系人:

 [Authorize]
    [Route("customer/{customerid}/contact")]
    [ApiController]
    public class ContactController : ControllerBase
    {
        private List<Models.Contact> _contacts;

        public ContactController()
        {
            _contacts = new List<Models.Contact>();
            _contacts.Add(new Models.Contact { Id = 1, Email = "Test1@gmail.com", Name = "Test1", Password = "Test1", Phone = 11111 });
            _contacts.Add(new Models.Contact { Id = 2, Email = "Test12@gmail.com", Name = "Test12", Password = "Test12", Phone = 1111 });
            _contacts.Add(new Models.Contact { Id = 3, Email = "Test123@gmail.com", Name = "Test123", Password = "Test123", Phone = 111 });
            _contacts.Add(new Models.Contact { Id = 4, Email = "Test1234@gmail.com", Name = "Test1234", Password = "Test1234", Phone = 11 });
            _contacts.Add(new Models.Contact { Id = 5, Email = "Test12345@gmail.com", Name = "Test12345", Password = "Test12345", Phone = 1 });

        }
        [HttpGet]
        public IActionResult GetCustomers()
        {
            return Ok(_contacts);
        }

        [HttpGet("{id}")]
        public IActionResult GetContact(int id)
        {
            foreach (var item in _contacts)
            {
                if (id == item.Id)
                {
                    return Ok(item);
                }
            }
            return NoContent();
        }

在您的 ContactController 上,您可以将路线数据移至动作中,并保持路线简单。

例如:

[Route("contact")]
[ApiController]
public class ContactController : ControllerBase

    [HttpGet("{customerId}/{contractId}")]
    public IActionResult GetContact(int customerId, int contactId)
    {

    }

然后您可以通过 contact/1/1 访问它,这将为您提供客户 ID == 1 和联系人 ID == 1