代码之家  ›  专栏  ›  技术社区  ›  DimChtz

针对特定控制器的不同启动配置

  •  0
  • DimChtz  · 技术社区  · 2 年前

    考虑以下内容 ConfigureServices() 在Startup类中:

    // ...
    public void ConfigureServices(IServiceCollection services)
    {
        // ...
        services.Configure<Microsoft.AspNetCore.Mvc.ApiBehaviorOptions>(options =>
        {
            options.SuppressModelStateInvalidFilter = true;
        });
        // ...
    }
    // ...
    

    这是 SuppressModelStateInvalidFilter true 对于每个控制器 [ApiController] 属性

    但是,如果我只需要对特定的控制器实现这一点,该怎么办?这可能吗?

    我发现我们可以用 appBuilder.Map() 内部 Configure() 方法。此解决方案的问题在于 services 仍然共享。

    编辑: SuppressModelStateInvalidFilter 只是一个例子。我需要为特定的控制器做更多的工作:)

    0 回复  |  直到 2 年前
        1
  •  0
  •   Rikudou En Sof    2 年前

    我偶然发现了这个 article 关于Microsoft学习。

    样品

     [ApiController]
    
    
    public class PersonController
     {
         [SuppressModelStateInvalidFilter]
         public ActionResult<Person> Get() => new Person();
     }
        
     public class SuppressModelStateInvalidFilterAttribute : Attribute, IActionModelConvention
     {
         public void Apply(ActionModel action)
         {
             for (var i = 0; i < action.Filters.Count; i++)
             {
                 if (action.Filters[i] is ModelStateInvalidFilter)
                 {
                     action.Filters.RemoveAt(i);
                     break;
                 }
             }
         }
     }