#c# #asp.net-mvc #asp.net-mvc-3 #httpwebrequest
#c# #asp.net-mvc #asp.net-mvc-3 #httpwebrequest
Вопрос:
Я использую простой маршрут как
routes.MapRoute(
"Default2", // Route name
"{cliurl}/{id}", // URL with parameters
new { cliurl = "none", controller = "ABook", action = "Index", id = "none" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{cliurl}/{controller}/{action}/{id}", // URL with parameters
new { cliurl = "none", controller = "ABook", action = "Index", id = "none" } // Parameter defaults
);
и когда я отлаживаю веб-сайт (VS2010 SP1), у меня есть точка останова в моем ABook
контроллере, внутри Index
метода действия, который содержит только:
//
// GET: /ABook/
public ActionResult Index()
{
if (currentClient == null)
return RedirectToAction("Empty");
return View();
}
//
// GET: /Empty/
public ActionResult Empty()
{
return View();
}
Дело в том, что, когда я вставляю это в браузер:
http://localhost:14951/client_name/hashed_id
Я получаю 3 разрыва в этой точке останова.
Как я могу увидеть, что в мире происходит? почему 3 раза, когда я только что запросил 1, что именно запрашивает браузер?
Я могу получить только параметры маршрута, и я получаю первые правильные, но 2-й и 3-й используют значения по умолчанию, и я попытался перемещаться по RequestContext
и я не вижу ничего полезного : (
Просто хочу знать, есть ли способ действительно увидеть, что было запрошено.
Ответ №1:
В итоге я использовал Glimpse
Комментарии:
1. Извините за невежество, но как вы его загружаете? Я попал сюда- nuget.org/List/Packages/Glimpse и нет ссылки..
2. Установите
NuGet
вVisual Studio
(если у вас есть шаблоны MVC3), они у вас уже есть. Щелкните правой кнопкой мыши в папке References в вашем проекте и выберите Добавить ссылку на пакет библиотеки , нажмитеOnline
->NuGet official package source
и выполните поискGlimpse
… установить! — Вы можете вызвать диалоговое окно из Tools -> Library Package Manager -> Add Library Package Reference … или открыть консоль и установить с помощьюInstall-Package Glimpse
— Подробнее читайте здесь hanselman.com/blog /…3. Также вы можете перейти на codeplex прямо сейчас и загрузить его напрямую — glimpse.codeplex.com
Ответ №2:
Если у вас есть точка останова внутри контроллера, вы можете использовать watch, где вы можете просто создать новый watch. Введите Request
и выполните поиск…
Комментарии:
1. Я знаю, как использовать инструменты Visual Studio, это не мой вопрос, я просто хочу знать, где я могу это увидеть, какой объект, поскольку
RequestContext
объект ничего об этом не содержит.2. То, что было запрошено, находится в
Request
object
Ответ №3:
В каждом контроллере существует свойство, называемое Request. На самом деле он определен в System.Web.Mvc.Controller, который является суперклассом всех контроллеров. Свойство возвращает фактический объект запроса как HttpRequestBase и предоставляет такие поля, как InputStream, Headers, HttpMethod и так далее и тому подобное.
Что касается того, почему вы нажимаете на метод index 3 раза, я уверен, что другие запросы, сделанные браузером, скажем, например, для изображений и javascript и других существующих файлов, также обрабатываются вашим маршрутом, определенным. Короче говоря, ваше определение маршрута слишком универсально и обрабатывает неожиданные запросы. Вы можете исправить это с помощью Route.Игнорируйте маршрут («Путь / к / Существующим /файлам») или сделайте свой маршрут более конкретным, добавив RouteConstraints. Оставьте комментарий, если хотите знать, как это сделать.
Ответ №4:
Вы можете использовать fiddler, чтобы посмотреть, что запрашивает браузер, или вы могли бы попробовать routdebugger
загрузить из Nuget.
Комментарии:
1. :o) Я знаю это, я хочу знать внутри кода, потока, запросов, которые находятся внутри MVC
Ответ №5:
Я знаю, что другие вроде как пытались это сделать… они верны:
Используйте Request
объект, чтобы узнать, что запрашивается. Вероятно, ваш контроллер неправильно обрабатывает что-то. Извлеките некоторые выходные данные во время отладки из Request
этого метода, например необработанный URL. Это, скорее всего, даст ответ на вопрос.
Ответ №6:
В качестве предложения, почему бы не подключить BeginRequest
обработчик событий для приложения, который позволит вам видеть каждый проходящий запрос. Также есть HttpContext.Current.Request.Url
объект, который можно проверить
// Global.asax
public MvcApplication()
{
BeginRequest = new EventHandler(MvcApplication_BeginRequest);
}
void MvcApplication_BeginRequest(object sender, EventArgs e)
{
Debug.WriteLine("[Start] Requested Url: " HttpContext.Current.Request.RawUrl);
}