в ASP.NET MVC3, как я могу увидеть запрос? - PullRequest
2 голосов
/ 12 апреля 2011

Я использую простой маршрут как

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, и я не вижу ничего полезного: (

Просто хочу узнать, есть ли способ действительно увидеть то, что было запрошено.

Ответы [ 6 ]

2 голосов
/ 28 мая 2011
1 голос
/ 12 апреля 2011

В каждом контроллере есть свойство с именем Запрос .Это фактически определено в System.Web.Mvc.Controller, который является суперклассом всех контроллеров.Свойство возвращает точный объект Request как HttpRequestBase и предоставляет такие поля, как InputStream, Headers, HttpMethod и т. Д.

Что касается того, почему вы нажимаете метод index 3 раза, я уверен, что другие запросы сделалинапример, браузером, например, для изображений, javascript и других существующих файлов, которые также обрабатываются в соответствии с заданным вами маршрутом.Короче говоря, ваше определение маршрута слишком общее и обрабатывает неожиданные запросы.Вы можете исправить это, используя Route.IgnoreRoute («Путь / к / Существующим / Файлы») или сделав свой маршрут более конкретным, добавив RouteConstraints.Оставьте комментарий, если хотите знать, как это сделать.

1 голос
/ 12 апреля 2011

Если у вас есть точка останова внутри контроллера, вы можете использовать часы, где вы можете просто создать новые часы.Введите Request и найдите его ...

0 голосов
/ 12 апреля 2011

Как совет, почему бы не подключить обработчик событий 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);
    }
0 голосов
/ 12 апреля 2011

Я знаю, что другие вроде как сделали удар в этом ... они правы:

Используйте объект Request, чтобы узнать, что запрашивается. Возможно, это что-то неправильно обрабатывается вашим контроллером. Уберите часть вывода во время отладки с Request в этом методе, например, необработанный URL. Это, вероятно, ответит на вопрос.

0 голосов
/ 12 апреля 2011

Вы можете использовать fiddler , чтобы увидеть, что запрашивает браузер, или вы можете попробовать routdebugger загрузить с Nuget.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...