Это мой пользовательский атрибут
public class CaptureMetrics : ActionFilterAttribute
{
private readonly string _metricType;
public CaptureMetrics(MetricTypes metricType)
{
_metricType = metricType.ToString();
}
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
try
{
string strJson;
var reqPayload = context.HttpContext.Request.Body;
using (var sr = new StreamReader(reqPayload))
{
strJson = await sr.ReadToEndAsync();
}
//Type t = Type.GetType(_metricType);
//below I need to typecast the object to the equivalent DTO
var obj = JsonConvert.DeserializeObject(strJson); //line #
// ToDo
}
catch (Exception)
{
//ToDo -> Log Exception
throw;
}
finally
{
await next();
}
}
}
public enum MetricTypes
{
ApiMetric
}
//DTO
public class ApiMetric
{
//some properties
}
Из действия контроллера указанный выше атрибут используется, как показано ниже.
[CaptureMetrics(MetricTypes.ApiMetric)]
public async Task<IActionResult> Get([FromBody]ApiPayload payload)
{
}
В строке # мне нужно преобразовать полезную нагрузку запроса в эквивалентный класс DTO.
Для каждой записи в Enum (MetricType) у меня есть класс с тем же именем (например, ApiMetric).
Как привести объект сюда?
JsonConvert.DeserializeObject(strJson, t);
- person Alexander Petrov   schedule 28.01.2021obj
имеет типobject
, что означает, что вы не можете с ним работать. Это проблема? - person Christoph Lütjen   schedule 28.01.2021Alexander Petrov
иChristoph Lütjen
, вы можете использовать только JsonConvert.DeserializeObject(strJson, t) и получать данные из объекта. - person Yiyi You   schedule 29.01.2021obj
docs.microsoft .com/en-us/dotnet/csharp/language-reference/ - person Christoph Lütjen   schedule 29.01.2021