Validation invoking queries?
I believe it's ok to use db data inside a validator's body. As long as all you do with database is reading data, and this data is neccesary for validation. But if you're about to change something in database - that's pretty considerable.

Then, if you can do something with this data, like caching it or smth, you may want to consider moving this part of validator's logic into some abstraction, like CountryCodeHandler or something like this.

I would also point out on your working with string values. I don't think it's good to use those "Not found" or "InvalidRequest" strings. If the string is exactly what you need, i'd advise you to use some static class:

public static class MyHttpStatusCode
{
    public const string NotFound = "Not Found";
    public const string InvalidRequest = "Invalid Request";
}


Thus, you'll get rid of duplicates in your code. Or, if those strings aren't that unavoidable, you can just use HttpStatusCode enum from System.Web (as i recall).

Also in modern versions of C# you don't need the "this" keyword to access to fields and properties those names arent match any variable inside the method or constructor. Unless it's your codestyle that declares such thing.

As for your controller part, i'd recommend you to use the Chain of Responsibility pattern. It will allow you to extend validation results and handle them properly.

public interface ICountryCodeValidationResultFilter
{
    ValidationError[] Filter(List&lt;ValidationError&gt; errors, out HttpStatusCode statusCode);
}
public interface IConcreteCodeValidationResultFilter
{
    bool CanFilter(List&lt;ValidationError&gt; errors);
    ValidationError[] Filter(List&lt;ValidationError&gt; errors, out HttpStatusCode statusCode);
}

public class CountryCodeValidationResultFilter : ICountryCodeValidationResultFilter
{
    private readonly IConcreteCodeValidationResultFilter[] filters;

    public CountryCodeValidationResultFilter(IConcreteCodeValidationResultFilter[] filters)
    {
        this.filters = filters;
    }

    public ValidationError[] Filter(List&lt;ValidationError&gt; errors, out HttpStatusCode statusCode) 
    {
        if (errors.Any())
        {
            for (var filter in this.filters) // you may just write "filters" here
            {
                if (filter.CanFilter(errors))
                {
                    return filter.Filter(errors, out statusCode);
                }
            }
        }

        statusCode = HttpStatusCode.OK;
        return new ValidationError[0];
    }
}

public NotFoundCodeValidationResultFilter : IConcreteCodeValidationResultFilter
{
    public bool CanFilter(List&lt;ValidationError&gt; errors)
    {
        return errors.Any(e =&gt; e.Code == "Not Found");
    }

    public ValidationError[] Filter(List&lt;ValidationError&gt; errors, out HttpStatusCode statusCode)
    {
        statusCode = HttpStatusCode.NotFound;
        return new[] { errors.First(e =&gt; e.Code == "Not Found") };
    }
}

public InvalidRequestCodeValidationResultFilter : IConcreteCodeValidationResultFilter
{
    public bool CanFilter(List&lt;ValidationError&gt; errors)
    {
        return errors.All(e =&gt; e.Code != "Not Found");
    }

    public ValidationError[] Filter(List&lt;ValidationError&gt; errors, out HttpStatusCode statusCode)
    {
        statusCode = HttpStatusCode.NotFound;
        return errors.ToArray();
    }
}


Thus, your controller will look like this:

public class CountriesContoller : ApiController
{
    private readonly ICountryCodeValidator countryCodeValidator;
    private readonly ICountryCodeRepository countryCodeRepository;
    private readonly ICountryCodeValidationResultFilter countryCodeValidationResultFilter;

    public CountriesContoller(
        ICountryCodeValidator countryCodeValidator,
        ICountryCodeRepository countryCodeRepository,
        ICountryCodeValidationResultFilter countryCodeValidationResultFilter)
    {
        this.countryCodeValidator = countryCodeValidator;
        this.countryCodeRepository = countryCodeRepository;
        this.countryCodeValidationResultFilter = countryCodeValidationResultFilter;
    }

    public HttpResponseMessage Get([FromUri]string countryCode)
    {
        var errors = countryCodeValidator.Validate(countryCode);
        HttpStatusCode resultStatusCode;
        var filteredErrors = countryCodeValidationResultFilter.Filter(errors, out resultStatusCode);

        return Request.CreateResponse(resultStatusCode, filteredErrors.Any() ? filteredErrors : countryCodeRepository(countryCode));
        // i believe countryCodeRepository is not just Func, huh? perhabs it should be "countryCodeRepository.Get(countryCode)" ?
    }
}