35

I want to add a Location header to my http response when using webapi 2. The method below shows how to do this using a named route. Does anyone know if you can create the Url.Link using Attribute Routing feature that was released as part of webapi 2?

string uri = Url.Link("DefaultApi", new { id = reponse.Id });
httpResponse.Headers.Location = new Uri(uri);

Thanks in advance

2 Answers 2

61

You can use RouteName with Ur.Link when using attribute routing.

public class BooksController : ApiController
{
    [Route("api/books/{id}", Name="GetBookById")]
    public BookDto GetBook(int id) 
    {
        // Implementation not shown...
    }

    [Route("api/books")]
    public HttpResponseMessage Post(Book book)
    {
        // Validate and add book to database (not shown)

        var response = Request.CreateResponse(HttpStatusCode.Created);

        // Generate a link to the new book and set the Location header in the response.
        string uri = Url.Link("GetBookById", new { id = book.BookId });
        response.Headers.Location = new Uri(uri);
        return response;
    }
}

http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#route-names

Sign up to request clarification or add additional context in comments.

Comments

3

You can do:

[Route("{id}", Name="GetById")]
public IHttpActionResult Get(int id) 
{
    // Implementation...
}

public IHttpActionResult Post([FromBody] UsuarioViewModel usuarioViewModel)
    {
        if (!ModelState.IsValid)
            return BadRequest();

        var link = Url.Link("GetById", new { id = 1});

        var content = "a object";     
        return Created(link, content);
    }

1 Comment

This one really helped. Thanx

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.