WebApi 中的 Per-Controller 配置问题

Issue with Per-Controller configuration in WebApi

我正在尝试编写一个自定义控制器配置属性,配置似乎没有被采用,请求没有使用我们的自定义合同解析器,这是我们的代码在 class 实现了 IControllerConfiguration。

using System;
using System.Net.Http.Formatting;
using System.Web.Http.Controllers;

namespace OurCoolStuff.Api.Common.Attributes
{
    public class SuperAwesomeCustomConfig: Attribute, IControllerConfiguration
    {
        public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
        {
            controllerSettings.Formatters.Clear();
            controllerSettings.Formatters.Add(GetCustomContractResolver());
        }

        private MediaTypeFormatter GetCustomContractResolver()
        {
            var formatter = new JsonMediaTypeFormatter
            {
                SerializerSettings =
                {
                    ContractResolver = new OurSuperCoolCustomContractResolver()
                }
            };
            return formatter;
        }
    }
}

然后我们就可以像这样简单地使用它:

[SuperAwesomeCustomConfig]
TestController : ApiController{
...Controller methods here
}

我们尝试在 SuperAwesomeCustomConfig class 中插入断点并初始化方法,但它们从未被击中。

需要注意两点: 我们的控制器方法返回 Task<>async,我们也使用 unity 进行依赖注入。

我们的统一代码在 UnityConfig.cs

中看起来像这样
public static void RegisterComponents()
        {
            var container = new UnityContainer();
            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }

据我所知,这是非常好的样板。

事实证明,我们使用的 ContractResolver 正在寻找错误的类型,所以简而言之,一切都按预期工作。我应该花更多的时间来研究这个问题。 linqpad 的无耻插件,因为它让我们能够弄清楚我们的自定义 ContractResolver 出了什么问题。