你如何进行调试MVC 4 API路线?(How do you debug MVC 4 API rou

2019-06-26 06:21发布

我有一个使用RESTsharp我MVC4 REST风格的服务器进行通信的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
            }             
        );

Answer 1:

RouteDebugger有利于搞清楚哪些路由会/不会被击中。

http://nuget.org/packages/routedebugger



Answer 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

请记住,在Web API项目时,HTTP路线是WebApiConfig.cs ,不RouteConfig.cs



Answer 3:

您可以尝试的ASP.NET Web API路线调试器。 它是Web API编写。 https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/



Answer 4:

还有用于测试的路线更多的可能性。 您可以尝试是手动测试或自动化,单元测试的一部分。 手动测试:

  • RouteDebugger
  • MVC API跟踪

自动化测试:

  • MvcRouteTester 。


Answer 5:

是GameController从ApiController获得? 您正在使用的WebAPI?

如果没有,那么我觉得“/ API /”被保留用于新的WebAPI功能。 试着改变你的路由和控制器的名字“的GameAPI”

然而,如果你正在使用的WebAPI。

然后从侑BASEURL删除API

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


文章来源: How do you debug MVC 4 API routes?