Отладка собственного приложения WebApi

У меня есть приложение WebApi со следующим контроллером:

public class ContentController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post(string contentType)
    {
        //do stuff
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
}

Маршрут выглядит так

routes.MapHttpRoute("content", 
    "api/content/{contentType}", 
    new { controller = "Content", contentType = RouteParameter.Optional });

Когда я размещаю службу в IIS/cassini, если я отправляю POST в api/content/whatever, то, как и ожидалось, действие моего контроллера срабатывает.

Однако,

У меня есть тестовый проект, который SelfHosts этот API

using (var client = new HttpClient(Server))
{
    var result = client.PostAsync(BaseAddress + "api/content/whatever"

    var message = result.Content.ReadAsStringAsync().Result;
}

Если я отлажу модульный тест и войду в него, result будет:

{StatusCode: 500, ReasonPhrase: «Внутренняя ошибка сервера», версия: 1.1, содержимое: System.Net.Http.ObjectContent`1[[System.Web.Http.HttpError, System.Web.Http, версия = 5.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35]], Заголовки: { Content-Type: application/json; кодировка=utf-8 }}

К сожалению, message буквально просто

произошла ошибка

Есть ли способ отладить собственный WebApi, чтобы выяснить, что вызывает эту ошибку?

Настроить

Server - это просто HttpServer из базового класса, который содержит мой собственный сервер, новый, такой:

var httpConfig = new HttpSelfHostConfiguration(BaseAddress);

new ApiServiceConfiguration(httpConfig).Configure();

var server = new HttpSelfHostServer(httpConfig);
server.OpenAsync().Wait();
Server = server;

person Alex    schedule 06.11.2013    source источник
comment
(Как) вы назначаете маршруты на свой сервер, это происходит в ApiServiceConfiguration.Configure()? Вы установили для параметра config.IncludeErrorDetailPolicy значение IncludeErrorDetailPolicy.Always?   -  person CodeCaster    schedule 06.11.2013
comment
Спасибо, это дало мне детали, необходимые для поиска проблемы. Если вы создадите ответ, я приму его. Для справки, это проблема, которая у меня есть! stackoverflow.com/questions/ 19810754/   -  person Alex    schedule 06.11.2013
comment
@ Алекс, у меня такая же проблема. Я хочу отлаживать свой собственный API. не могли бы вы порекомендовать мне какое-нибудь решение.   -  person yakhtarali    schedule 31.08.2015


Ответы (2)


Если вы включите трассировку и добавите Trace.Listeners.Add(new ConsoleTraceListener()), вы получите более подробные сообщения об ошибках. Однако ваша проблема, скорее всего, связана с тем, что объект, который вы пытаетесь сериализовать, не сериализуется.

person Darrel Miller    schedule 06.11.2013

Добавлено в автозагрузку

config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

где config относится к типу HttpConfiguration.

Эта единственная строка кода решила для меня ту же проблему - теперь я могу видеть все детали внутреннего исключения.

person Konstantin Chernov    schedule 24.09.2015