首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何调试MVC4API路由?

如何调试MVC4API路由?
EN

Stack Overflow用户
提问于 2012-07-13 22:58:43
回答 4查看 47.5K关注 0票数 76

我有一个WP7游戏,它使用RESTsharp与我的MVC4 RESTful服务器通信,但我经常在发出正常工作的请求时遇到问题,因此我希望在失败的地方进行调试。

这是一个例子,其中我的GameController上的构造函数被命中,但Post方法没有被命中,我不明白为什么。

客户端代码:

代码语言:javascript
复制
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) =>
  {});
}

服务器代码:

代码语言:javascript
复制
    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);
    }

我的路线是这样的

代码语言:javascript
复制
       routes.MapHttpRoute(
            name: "gameAPI",
            routeTemplate: "api/game/{gameId}",
            defaults: new
            {
                controller = "game",
                gameId = RouteParameter.Optional
            }             
        );
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-14 00:44:54

RouteDebugger很适合找出哪些路由将会/不会被命中。

http://nuget.org/packages/routedebugger

票数 36
EN

Stack Overflow用户

发布于 2014-08-24 05:25:23

另一种方法是在Global.asax.cs中添加一个事件处理程序来获取传入的请求,然后在VS调试器中查看路由值。按如下所示覆盖Init方法:

代码语言:javascript
复制
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中。

票数 113
EN

Stack Overflow用户

发布于 2013-03-04 16:26:07

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11473038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档