Multiple 'using' statements in method implementation I'm learning WebAPI framework for ASP.NET and C#. Is the following way of handling incoming data correct?

    [HttpPost]
    [ExpiredCookieCheck]
    public IHttpActionResult Auth([FromBody]AuthenticationData authenticationData)
    {
        try
        {
            if (authenticationData == null)
                using (var responseManager = new ResponseManager())
                    return responseManager.PrepareMessage(
                        HttpStatusCode.Unauthorized,
                        "No authentication model was provided in request body.",
                        null,
                        ResponseManager.ResponseType.InterfacePlainText
                    );

            using (var authenticationHandler = new AuthenticationHandler())
            {
                var validationData = authenticationHandler.CheckAuthenticationDataFromWeb(authenticationData);

                if (!validationData.Key)
                    using (var responseManager = new ResponseManager())
                        return responseManager.PrepareMessage(
                            HttpStatusCode.Unauthorized,
                            "Incorrect credentials for authentication.",
                            null,
                            ResponseManager.ResponseType.InterfacePlainText
                        );

                using (var cookieManager = new CookieManager())
                using (var responseManager = new ResponseManager())
                {
                    var authenticationCookie = cookieManager.CreateAuthenticationCookieHeader(Request.RequestUri.Host);
                    cookieManager.SaveAuthenticationCookie(validationData.Value.Id, authenticationCookie);

                    return responseManager.PrepareMessage(
                        HttpStatusCode.OK,
                        null,
                        authenticationCookie,
                        ResponseManager.ResponseType.InterfacePlainText
                    );
                }
            }
        }
        catch (Exception exception)
        {
            using (var responseManager = new ResponseManager())
                return responseManager.PrepareMessage(
                    HttpStatusCode.Unauthorized,
                    exception.ToString(),
                    null,
                    ResponseManager.ResponseType.InterfacePlainText
                );
        }
    }


I'm thinking that I'm using something not correctly. I dislike my way of defining using statements. Maybe it's miles better to define at the beginning of the method all required using statements and then only call internal methods of objects from those using statements.

Also, is it correct to use try/catch block of code in Web API controller method? I'm thinking that it could be incorrect to handle some possible errors in Web API method, couldn't it?
There is nothing inherently wrong with having multiple using statements. It keeps the lifetime of objects to the minimum which is not a bad thing to do. 

Another point is that I'd possibly re-factor the error raising: You always prepare the error message with the same parameters except for the actual message. This could easily be encapsulated in a little helper function. So the refactored code could look like this:

private Response GetUnauthorizedResponse(string message)
{
    using (var responseManager = new ResponseManager())
    {
        return responseManager.PrepareMessage(
            HttpStatusCode.Unauthorized,
            message,
            null,
            ResponseManager.ResponseType.InterfacePlainText
        );
    }
}

[HttpPost]
[ExpiredCookieCheck]
public IHttpActionResult Auth([FromBody]AuthenticationData authenticationData)
{
    try
    {
        if (authenticationData == null)
        {
            return GetUnauthorizedResponse("No authentication model was provided in request body.");
        }

        using (var authenticationHandler = new AuthenticationHandler())
        {
            var validationData = authenticationHandler.CheckAuthenticationDataFromWeb(authenticationData);
            if (!validationData.Key)
            {
                return GetUnauthorizedResponse("Incorrect credentials for authentication.");
            }

            using (var cookieManager = new CookieManager())
            using (var responseManager = new ResponseManager())
            {
                var authenticationCookie = cookieManager.CreateAuthenticationCookieHeader(Request.RequestUri.Host);
                cookieManager.SaveAuthenticationCookie(validationData.Value.Id, authenticationCookie);

                return responseManager.PrepareMessage(
                    HttpStatusCode.OK,
                    null,
                    authenticationCookie,
                    ResponseManager.ResponseType.InterfacePlainText
                );
            }
        }
    }
    catch (Exception exception)
    {
        return GetUnauthorizedResponse(exception.ToString());
    }
}


This removed some distracting clutter and lets the reader focus better on the actual functionality of the method.