我有一个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) =>
{});
}
服务器代码:
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
}
);
发布于 2012-07-13 16:44:54
RouteDebugger很适合找出哪些路由将会/不会被命中。
发布于 2014-08-23 21:25:23
另一种方法是在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
中。
发布于 2013-03-04 08:26:07
您可以尝试使用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/
https://stackoverflow.com/questions/11473038
复制