如何调试 MVC 4 API 路由?

我有一个 WP7游戏,使用 RESTSharp 与我的 MVC4 RESTful 服务器通信,但我经常有问题,使请求工作,因此我想调试它失败的地方。

这是一个例子,我的 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) =>
{});
}

Server code:

    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
}
);
48848 次浏览

游戏控制器是从 APIController 衍生出来的吗? Are you using WebApi ?

如果没有,那么我认为“/api/”是为新的 WebApi 特性保留的。尝试将您的路由和控制器名称更改为“ gameapi”

如果您正在使用 WebApi。

然后从 BaseUrl 中删除 api

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

RouteDebugger 可以很好地确定哪些路由将会/不会被命中。

Http://nuget.org/packages/routedebugger

你可以尝试使用 ASP.NET 网络 API 路由调试器,它是为网络 API 编写的。 < a href = “ https://trocolate.wordpress.com/2013/02/06/ 導入-asp-net-Web-API-path-Debugger/”rel = “ nofollow”> https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-Web-API-Route-Debugger/ Http://nuget.org/packages/webapiroutedebugger/

另一种方法是在 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中。

测试路线的可能性更大。您可以尝试将手动测试或自动化作为单元测试的一部分。 手动测试:

自动化测试: