WebApi中的Per-Controller配置问题

时间:2015-10-20 22:13:20

标签: asp.net-web-api asp.net-web-api2

我正在尝试编写自定义控制器配置属性,配置似乎没有采用,请求不使用我们的自定义合约解析器,这是我们的代码在实现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类中插入断点,并初始化方法,但它们从未被击中。

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

我们的统一代码在UnityConfig.cs中看起来像这样。

public static void RegisterComponents()
        {
            var container = new UnityContainer();
            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
        }

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

1 个答案:

答案 0 :(得分:0)

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