我正在尝试编写自定义控制器配置属性,配置似乎没有采用,请求不使用我们的自定义合约解析器,这是我们的代码在实现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);
}
据我所知,这是非常好的样板。
答案 0 :(得分:0)
事实证明我们使用的ContractResolver正在查看错误的类型,所以简而言之,一切都按预期工作。我应该花更多的时间来研究这个问题。 linqpad的无耻插件,因为这使我们能够找出自定义ContractResolver的错误。