CreatedAtRoute routing to different controller
Late to the party but an alternative answer. If the action you are routing to also uses attribute routing, you can give the route a name and pass that in to the CreatedAtRoute method. This is done by setting a Name
property on the Route
. Following your post example, consider the following action.
// GET: api/Messages/5
[Route("api/messages/{id}", Name="GetMessage")]
public async Task<IHttpActionResult> GetMessage(int id)
{
// get the message
}
Note that the Name
property on the route attribute, [Route("api/messages/{id}", Name="GetMessage")]
, is set to "GetMessage"
. By doing this we can call the CreatedAtRoute
method from the PostChannelMessage
action and pass in the route name like so:
return CreatedAtRoute("GetMessage", new { id = message.Id }, message);
This is a scenario I encountered and my searching led here so thought I would post this alternative answer in case it helps anyone else.
Oh dear, this may be a new record for answering my own question.
return CreatedAtRoute("DefaultApi", new { controller = "messages", id = message.Id }, message);
does the trick. i.e. explicitly specifying the controller. I worked this our by seeing that the exception was related to the UrlHelper and reading its docs...