76

RESTsharpを使用してMVC4RESTfulサーバーと通信する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
            }             
        );
4

5 に答える 5

113

もう1つの方法は、イベントハンドラーを追加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ます。

Web APIプロジェクトでは、HttpルートはでありWebApiConfig.cs、ではないことに注意してくださいRouteConfig.cs

于 2014-08-23T21:25:23.427 に答える
36

RouteDebuggerは、どのルートがヒットするか、またはヒットしないかを判断するのに適しています。

http://nuget.org/packages/routedebugger

于 2012-07-13T16:44:54.077 に答える
1

ASP.NETWebAPIルートデバッガーを試すことができます。これはWebApi用に書かれています。https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/

于 2013-03-04T08:26:07.210 に答える
1

ルートをテストするためのより多くの可能性があります。単体テストの一部として、手動テストまたは自動テストのいずれかを試すことができます。手動テスト:

自動テスト:

于 2014-10-16T08:58:41.027 に答える
0

GameControllerはApiControllerから派生していますか?WebApiを使用していますか?

そうでない場合は、「/api/」は新しいWebApi機能用に予約されていると思います。ルーティングとコントローラーの名前を「gameapi」に変更してみてください

ただし、WebApiを使用している場合。

次に、BaseUrlからAPIを削除します

  client = new RestClient
  {
      CookieContainer = new CookieContainer(),
      BaseUrl = "http://localhost:21688/",
  };
于 2012-07-13T16:41:41.170 に答える