в ASP.NET MVC3 как я могу увидеть запрос?

#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:

Комментарии:

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);
    }