Open roman-po opened 7 years ago
Thank you for writing. That does, indeed, look like a bug. In fact, it looks like a bug in ASP.NET Web API, because if you change the ExampleService HomeController.Get(string)
to create the second link like the following, you still see the same behaviour:
new AtomLinkModel
{
Href = this.Url.Link("DefaultApi", new { Controller = "home" }),
Rel = "http://sample.ploeh.dk/rels/home"
}
I haven't checked whether it's an issue with the new ASP.NET Core framework, but it seems to be an issue at least with the version of ASP.NET Web API used by ExampleService.
Thanks for confirming my suspicions. The behaviour of Web Api is indeed flawed and by briefly looking at its code I cannot see any obvious bug.
The only way I found to get a proper link is to use named route:
[Route("home", Name = "HomeDefault")]
public HomeModelCollection Get()
{...}
Then Href = this.Url.Link("HomeDefault", null)
results in "href":"http://localhost:6788/home"
.
I've started using Hyperlinkr just a week or so ago, not long after I started working with Web Api 2. I came across what looks like an issue to me, but it could also be that my expectation is wrong.
So, my problem is that while processing a request with a single Id parameter I try to get a link to a parameterless resource served by another controller and the resulting link includes the Id of the current request. I see that the very same behaviour is exhibited by the
HomeController
in ExampleService. E.g. the response for http://localhost:6788/custom/route/5 isThe second "href" value
"http://localhost:6788/home/5"
corresponds to the expressionHref = this.linker.GetUri<HomeController>(r => r.Get()).ToString()
. I cannot see why it should end with/5
.Am I missing something?
Thanks, Roman.