Преобразование JsonResult в ViewResult в фильтре с ASP.NET Core - PullRequest
0 голосов
/ 28 августа 2018

Моя задача - убедиться, что контроллер может вернуть Json-подобный ответ или View, основываясь на том, кто вызывает соответствующий API. Для этого я изменил возвращаемые значения каждого контроллера, чтобы они давали JsonResult , и я создал класс, который расширяет IResultFilter .

В методе OnResultExecuting , расширенном IResultFilter Я вставил свою реализацию: я проверяю заголовок Accept вызова и содержит ли он text / html Я должен преобразовать JsonResult в ViewResult , используя в качестве viewModel только тело Json Value (которое также содержит другую информацию о вызове что мне не нужно в ViewModel). Но не находясь в контроллере, я не могу создать объект ViewResult.

Как я могу это сделать?

1 Ответ

0 голосов
/ 28 августа 2018

В IResultFilter свойство Result доступно только для чтения. Но это не тот случай в IActionFilter. Там вы можете переопределить результат:

public class TestFilter : Attribute, IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context)
    {
        var controller = context.Controller as Controller;
        controller.ViewData.Model = ((JsonResult)context.Result).Value;
        context.Result = new ViewResult()
        {
            ViewName = "Test",
            ViewData = controller.ViewData
        };
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {  
    }
}
...