Подтвердить что ты не робот

Как лучше всего отлаживать маршруты API MVC 4?

У меня есть игра WP7, в которой RESTsharp используется для связи с моим сервером RESTful MVC4, но у меня часто возникают проблемы с выполнением запросов, и поэтому я хочу отлаживать, где он не работает.

Это пример, когда объект Constructor на моем GameController попал, но метод Post не попал, и я не понимаю, почему.

Клиентский код:

public void JoinRandomGame()
{
  client = new RestClient
  {
      CookieContainer = new CookieContainer(),
      BaseUrl = "http://localhost:21688/api/",
  };

  client.Authenticator = GetAuth();

  RestRequest request = new RestRequest(Method.POST)
  {
      RequestFormat = DataFormat.Json,
      Resource = "game/"

  };

  client.PostAsync(request, (response, ds) =>
  {});
}

Код сервера:

    public void Post(int id)
    {
        if (ControllerContext.Request.Headers.Authorization == null)
        {
            //No auth
        }
        if (!loginManager.VerifyLogin(ControllerContext.Request.Headers.Authorization.Parameter))
        {
            //Failed login
        }

        string username;
        string password;
        LoginManager.DecodeBase64(ControllerContext.Request.Headers.Authorization.Parameter, out username, out password);
        gameManager.JoinRandomGame(username);
    }

Мои маршруты похожи на

       routes.MapHttpRoute(
            name: "gameAPI",
            routeTemplate: "api/game/{gameId}",
            defaults: new
            {
                controller = "game",
                gameId = RouteParameter.Optional
            }             
        );
4b9b3361

Ответ 2

Другой способ - добавить обработчик событий в Global.asax.cs, чтобы получить входящий запрос, а затем посмотреть значения маршрута в отладчике VS. Переопределите метод Init следующим образом:

public override void Init()
{
    base.Init();
    this.AcquireRequestState += showRouteValues;
}

protected void showRouteValues(object sender, EventArgs e)
{
    var context = HttpContext.Current;
    if (context == null)
        return;
    var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context)); 
}

Затем установите точку останова в showRouteValues и просмотрите содержимое routeData.

Имейте в виду, что в проекте веб-API маршруты Http находятся в WebApiConfig.cs, а не RouteConfig.cs.

Ответ 4

Есть больше возможностей для тестирования маршрутов. Вы можете попробовать ручное тестирование или автоматизировать в рамках модульных тестов. Ручное тестирование:

Автоматическое тестирование:

Ответ 5

Является ли GameController результатом ApiController? Вы используете WebApi?

Если нет, то я думаю, что "/api/" зарезервировано для новой функции WebApi. Попробуйте изменить название маршрутизации и контроллера на "gameapi"

Если вы используете WebApi.

Затем удалите api из yor BaseUrl

  client = new RestClient
  {
      CookieContainer = new CookieContainer(),
      BaseUrl = "http://localhost:21688/",
  };