【问题标题】:Convert JsonResult to ViewResult in Filter with ASP.NET Core使用 ASP.NET Core 在过滤器中将 JsonResult 转换为 ViewResult
【发布时间】:2018-08-28 14:19:06
【问题描述】:

我的任务是确保控制器可以根据谁调用相应的 API 返回类似 Json 的响应或视图。 为此,我更改了每个控制器的返回值,以便它们提供 JsonResult,并创建了一个扩展 IResultFilter 的类。

IResultFilter 扩展的 OnResultExecuting 方法中,我插入了我的实现:我检查调用的 Accept 标头以及它是否包含 text/html 我必须将 JsonResult 转换为 ViewResult,仅将 Json Value 主体(其中还包含有关我在 ViewModel 中不需要的调用的其他信息)。 但不在控制器中,我无法创建 ViewResult 对象。

我该怎么做?

【问题讨论】:

    标签: asp.net-core controller action-filter jsonresult viewresult


    【解决方案1】:

    在 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)
        {  
        }
    }
    

    【讨论】:

    • 结果在 OnResultExecuting 中是可编辑的,在 OnResultExecuted 中是不可编辑的。无论如何,使用您的方法,如何正确设置 ViewName ?感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多