Использование .net core mvc c #

У меня есть контроллер как:

[ServiceFilter(typeof(MyCustomFilter))]
public class HomeController : Controller
{
    public IActionResult Index(string type)
    {

    }
}

В моем фильтре я хочу получить строковое значение "type", поскольку оно передается как строка запроса

И мой фильтр как:

  [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class MyCustomFilter: ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
          //this is always null
           string id = filterContext.RouteData.Values["type"].ToString();
    }
}

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

Благодарность

3
aman 2 Янв 2018 в 22:56

2 ответа

Лучший ответ

Для параметров, переданных в строке запроса, используйте:

string id = filterContext.Request.Query["type"];
1
Racil Hilan 2 Янв 2018 в 20:11

Я считаю, что вы могли бы использовать что-то вроде следующего. Я использую что-то похожее на приведенное ниже в фильтре регистрации. Код фильтра журнала также приведен ниже. Вы также можете перебрать коллекцию.

string id = filterContext.ActionParameters["Type"];

Перебор всех параметров и их объединение в строку журнала, которая в конечном итоге записывается в файл.

logString = filterContext.ActionParameters.Aggregate(logString, (current, p) => current + (p.Key + ": " + p.Value + Environment.NewLine));
3
Jammin411 2 Янв 2018 в 20:32