Как я получаю выполняющийся объект для стекового фрейма?

Я предпочитаю: / Комментарии / Поиск / 3? Сортировать = автора. Строка запроса - хорошее место для передачи программных параметров, особенно если параметр (как в этом случае) не важен для целей SEO. Если бы параметр имел некоторое семантическое значение в качестве поискового запроса, первый URL был бы лучше.

В методе контроллера вы можете использовать что-то вроде этого:

public ActionResult Search(int id, string sort)

ASP.NET MVC автоматически соединит значения строки запроса с параметрами вашего метода.

Используйте следующий маршрут

routes.MapRoute(
                   "Default",                                              // Route name
                   "{controller}/{action}/{id}",                           // URL with parameters
                   new { controller = "Comments", action = "Search", id = "" }  // Parameter defaults
               );

/ Комментарии / Поиск / 3? Sort = author вызовет Поиск (3, «автор»)

/ Comments / Search / 3 вызовет Search (3, null)

Имейте в виду, что id обязателен, поэтому этот URL не будет работать: / Comments / Search

11
задан Cecil Has a Name 20 May 2009 в 18:29
поделиться

2 ответа

Я почти уверен, что это невозможно. Вот почему:

  1. Это может нарушить безопасность типов, так как любой может искать фрейм и получать объект независимо от того, в каком AppDomain \ Thread они выполняются или какие разрешения у них есть.

  2. ' this ' (C #) идентификатор на самом деле является просто аргументом метода экземпляра (первого), поэтому на самом деле нет никакой разницы между статическими методами и методами экземпляра, компилятор творит чудеса, чтобы передать право this объекту метод экземпляра, что, конечно же, означает, что вам потребуется доступ ко всем аргументам метода, чтобы получить объект this .

6
ответ дан 3 December 2019 в 10:45
поделиться

Я не уверен, что полностью понимаю, что вы хотите, но если вы хотите знать тип, в котором объявлен метод для определенного кадра стека, я думаю, этот код возвращает следующее:

StackTrace trace = new StackTrace();    
Type methodOwner = trace.GetFrame(0).GetMethod().DeclaringType;

Вы, конечно, должны будете передать индекс интересующего вас кадра (я использую 0 в качестве примера).

-1
ответ дан 3 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: