13

I am trying to convert my Web Api project to use attribute routing. One thing I am not understanding is the CreatedAtRoute method for a POST request. In my WebApiConfig.cs I used to have a

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionId}/{controller}/{action}",
            defaults: new { action = RouteParameter.Optional }
        );

I commented this out thinking it was no longer needed, but CreatedAtRoute wants the name of the route and cant find it. So how is that handled with attribute routing?

1 Answer 1

28

Ok...this was easy once you see whats going on. In attribute routing you have to specify the Name of the route to retrieve the resource. So on my GET action it looks like this:

[Route("{sessionId}",Name="GetSession")]
    [ResponseType(typeof(Session))]
    public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId, int siteId, Guid visitorId, Guid sessionId)

And then in the POST action change the CreatedAtRoute from:

return CreatedAtRoute("DefaultApi", new
        {
           controller: "session"
            visitorId = session.VisitorId,
            sessionId = session.SessionId
        }, session);

To this:

return CreatedAtRoute("GetSession", new
        {
            visitorId = session.VisitorId,
            sessionId = session.SessionId
        }, session);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.