В предыдущем MVC5 и ниже вы могли сделать ajax-вызов, который правильно развернул параметры:
JS:
$.post('/controller/endpoint',{intparam: 1, strparam: 'hello'})
CS:
public ActionResult endpoint(int intparam, string strparam){}
Inновый aspnetcore, он изменился:
CS:
public CustomClassWrapper{
public int intparam {get;set;}
public string stringparam {get;set;}
}
public ActionResult endpoint([FromBody]CustomClassWrapper item){}
Чтобы подвести итог, в новом фреймворке вам нужно написать класс-обёртку и передать только один [FromBody]Параметр к методу.Ранее параметры распаковывались по имени переменной правильно.
Итак, я пытаюсь повторно реализовать эту функцию в компоненте промежуточного программного обеспечения aspnetcore.У меня возникают трудности с правильным вызовом метода контроллера с параметрами.
Мой текущий сокращенный код:
public async Task Invoke(HttpContext context)
{
if (IsAjaxRequest(context.Request))
{
try
{
string bodyContent = new StreamReader(context.Request.Body).ReadToEnd();
var parameters = JsonConvert.DeserializeObject(bodyContent);
///What to do here?
}
catch (Exception ex)
{
throw new Exception("AJAX method not found ", ex);
}
}
else
{
await _next(context);
}
}
Я просто не уверен, что делатьсделать после десериализации параметров.У меня есть URL для конечной точки, а также параметры правильно.Просто нужно знать, как вызвать метод и вернуть результат в формате JSON.Должен ли я использовать Reflection, чтобы получить метод контроллера?Или есть лучший способ использования MVC?