Как изменить результат возврата API в ядре asp.net 2.2? - PullRequest
0 голосов
/ 15 января 2019

Мое требование заключается в том, что когда возвращаемый тип действия void или Task, я бы хотел вместо этого вернуть свой пользовательский ApiResult. Я попробовал механизм промежуточного программного обеспечения, но полученный мною ответ имеет значение null как для ContentLength, так и для ContentType, тогда как мне нужно представление json пустого экземпляра ApiResult. Где я должен сделать это преобразование тогда?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

В ядре .net несколько фильтров, и вы можете попробовать Фильтры результатов .

Для void или Task возвращается EmptyResult в OnResultExecutionAsync.

Попробуйте реализовать свой собственный ResultFilter как

public class ResponseFilter : IAsyncResultFilter
{
    public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        // do something before the action executes
        if (context.Result is EmptyResult)
        {
            context.Result = new JsonResult(new ApiResult());
        }
        var resultContext = await next();
        // do something after the action executes; resultContext.Result will be set
    }
}
public class ApiResult
{
    public int Code { get; set; }
    public object Result { get; set; }
}

И зарегистрируйте его в Startup.cs

services.AddScoped<ResponseFilter>();
services.AddMvc(c =>
                {                       
                    c.Filters.Add(typeof(ResponseFilter));
                }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
0 голосов
/ 15 января 2019

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

Вот абстрактное демо: У вас есть метод:

 public Action SomeActionMethod()
    {
        var obj = new object();
        return (Action)obj;
    }

Теперь в своем коде вы можете использовать следующий код, чтобы получить название метода:

 MethodBase b = p.GetType().GetMethods().FirstOrDefault();
        var methodName = ((b as MethodInfo).ReturnType.Name);

Где p в приведенном выше коде - это класс, который содержит методы, тип возвращаемого значения которых вы хотите знать.

после получения имени метода вы можете выбрать переменную methodName, что возвращать.

Надеюсь, это поможет.

...