Ответ 1
RouteDebugger хорош для определения, какие маршруты будут/не будут удалены.
У меня есть игра WP7, в которой RESTsharp используется для связи с моим сервером RESTful MVC4, но у меня часто возникают проблемы с выполнением запросов, и поэтому я хочу отлаживать, где он не работает.
Это пример, когда объект Constructor на моем 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
}
);
RouteDebugger хорош для определения, какие маршруты будут/не будут удалены.
Другой способ - добавить обработчик событий в 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
.
Имейте в виду, что в проекте веб-API маршруты Http находятся в WebApiConfig.cs
, а не RouteConfig.cs
.
Вы можете попробовать отладчик ASP.NET Web API Route Debugger. Он написан для Web Api. https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/
Есть больше возможностей для тестирования маршрутов. Вы можете попробовать ручное тестирование или автоматизировать в рамках модульных тестов. Ручное тестирование:
Автоматическое тестирование:
Является ли GameController результатом ApiController? Вы используете WebApi?
Если нет, то я думаю, что "/api/" зарезервировано для новой функции WebApi. Попробуйте изменить название маршрутизации и контроллера на "gameapi"
Если вы используете WebApi.
Затем удалите api из yor BaseUrl
client = new RestClient
{
CookieContainer = new CookieContainer(),
BaseUrl = "http://localhost:21688/",
};