У меня тоже была такая же проблема.Я могу вернуть тело ответа, но все остальное, код состояния, заголовки и т. Д. Переопределены где-то внизу строки.
Чтобы обойти это, вы можете сгенерировать исключение WebFaultException, которое позволяет вам установить код состояния.
throw new WebFaultException<string>("Tell the calling client what went wrong", System.Net.HttpStatusCode.Conflict);