【问题标题】:.Net Core MVC postprocess Parameter?.Net Core MVC 后处理参数?
【发布时间】:2019-01-24 20:17:17
【问题描述】:

我在多个控制器操作中有一个查询参数,我想在使用它之前以多种方式对其进行修改。

例如

public async Task<ActionResult<Foo>> GetFoo(string imageName)
{
    imageName = Uri.UnescapeDataString(imageName);
    imageName = RewriteSelfToUserId(imageName); // appends something to the string based on the currently logged in user
    .....
}

我想将所有这些行为放在一个地方,我只是不确定最好的方法是什么。

  1. 使用类 - 不是我最喜欢的,因为我需要来自请求上下文的一些东西,我需要传入这些东西。
  2. 字符串的属性。应该是一样的吧?如何传入当前用户?

  3. ???

【问题讨论】:

  • 您可以直接从视图传入用户(或用户名)作为路由参数的一部分。
  • 对不起,这是一个rest api,所以根本看不到
  • 控制器基类?
  • 您想要一个解决方案来识别查询中的 imageName,还是想要一个解决方案在请求到达操作之前访问它?
  • @Joshit 我认为第二个可能

标签: c# asp.net-core


【解决方案1】:

添加一个继承自IActionFilter的类:

public class MyFilter:IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context)
    {
        // pre-processing here
        var queryArgs = context.HttpContext.Request.Query;
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        // post-processing here
    }
}

要注册过滤器,请在您的 Startup.cs 中添加此选项:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(opt => opt.Filters.Add(new MyFilter()))
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

OnActionExecuted 将在每个 Action 之前调用,OnActionExecuting 将在每个 Action 之后调用。

【讨论】:

猜你喜欢
  • 2017-06-18
  • 2021-08-03
  • 2021-10-13
  • 2020-11-05
  • 1970-01-01
  • 2019-08-16
  • 2019-08-21
  • 2020-07-03
  • 2019-10-01
相关资源
最近更新 更多