I want to create some hyperlinks for my DTO`s returned from a REST Api.
The variable url
is always null and I do not know why?!
Why is the url not created, what am I still missing?
The name of the route is GetStatusFeedback
that's correct and I also use Action and Controller as route parameters + the leadId
param!
public class ValuesController : ApiController
{
[Route("")]
[HttpGet]
public IHttpActionResult Get()
{
var leadsFromDataBase = new List<Lead> { new Lead { Id = 1 }, new Lead { Id = 2 } };
var leadDtos = new List<LeadDto>();
foreach (var lead in leadsFromDataBase)
{
var leadDto = new LeadDto();
string url = Url.Link("GetStatusFeedback", new { LeadId = lead.Id, Action = "Accept", Controller = "values"});
leadDto.AcceptLink = new Link { Url = url, Verb = "Get" };
leadDtos.Add(leadDto);
}
return Ok(leadDtos);
}
[Route("leads/{id:int}/statusfeedback", Name = "GetStatusFeedback")]
[HttpPost]
public void Accept(int leadId)
{
}
route parameters need to match the expected parameter in the route template
string url = Url.Link("GetStatusFeedback", new { id = lead.Id });
should match based on the "leads/{id:int}/statusfeedback"
route template
also route template placeholders need to match parameter name in the action
[Route("leads/{id:int}/statusfeedback", Name = "GetStatusFeedback")]
[HttpPost]
public void Accept(int id) {
}
Finally you should use proper route names that help describe the route.