C# 如何调试MVC4API路由?
我有一个WP7游戏,它使用RESTsharp与我的MVC4 RESTful服务器进行通信,但是我经常在发出请求时遇到问题,因此我想在请求失败时进行调试 这是一个例子,我的C# 如何调试MVC4API路由?,c#,.net,asp.net-mvc,rest,asp.net-mvc-4,C#,.net,Asp.net Mvc,Rest,Asp.net Mvc 4,我有一个WP7游戏,它使用RESTsharp与我的MVC4 RESTful服务器进行通信,但是我经常在发出请求时遇到问题,因此我想在请求失败时进行调试 这是一个例子,我的GameController上的构造函数被命中,但是Post方法没有被命中,我不明白为什么 客户端代码: public void JoinRandomGame() { client = new RestClient { CookieContainer = new CookieContainer(),
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
}
);
GameController是从ApiController派生的吗? 您正在使用WebApi吗 如果不是,那么我认为“/api/”是为新的WebApi特性保留的。尝试将路由和控制器名称更改为“gameapi” 但是,如果您使用的是WebApi 然后从你的BaseUrl中删除api
client = new RestClient
{
CookieContainer = new CookieContainer(),
BaseUrl = "http://localhost:21688/",
};
RoutedBugger可以很好地确定哪些路线会/不会被击中
您可以尝试ASP.NET Web API路由调试器。它是为webapi编写的。
另一种方法是在
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
测试路由的可能性更大。作为单元测试的一部分,您可以尝试手动测试或自动测试。
手动测试: