IT Share you

MVC 4 API 경로를 어떻게 디버깅합니까?

shareyou 2020. 11. 7. 17:57
반응형

MVC 4 API 경로를 어떻게 디버깅합니까?


RESTsharp를 사용하여 MVC4 RESTful 서버와 통신하는 WP7 게임이 있지만 종종 작동하는 요청을 만드는 데 문제가 있으므로 실패한 부분을 디버깅하고 싶습니다.

이것은 내 생성자 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
            }             
        );

RouteDebugger는 어떤 라우트가 적중 될 것인지 아닌지 알아내는 데 유용합니다.

http://nuget.org/packages/routedebugger


또 다른 방법은 이벤트 핸들러를 추가 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합니다.

Keep in mind that in a Web API project, the Http routes are in WebApiConfig.cs, not RouteConfig.cs.


You can try ASP.NET Web API Route Debugger. It is written for Web Api. https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/


There are more possibilities for testing the routes. You can try either manual testing or automated as part of unit tests. Manual testing:

Automated testing:


Is GameController deriving from ApiController ? Are you using WebApi ?

If not then i think the "/api/" is reserved for new WebApi feature. Try changing your routing and controller name to "gameapi"

If however you are using WebApi.

Then remove api from yor BaseUrl

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

참고URL : https://stackoverflow.com/questions/11473038/how-do-you-debug-mvc-4-api-routes

반응형