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 出了什么问题。
我正在尝试编写一个自定义控制器配置属性,配置似乎没有被采用,请求没有使用我们的自定义合同解析器,这是我们的代码在 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 出了什么问题。