Search code examples
c#asp.net-web-apiasp.net-web-api-routing

Url.Link always returns null used within asp..net web api


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)
    {

    }

Solution

  • 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.