use*_*269 13 xml asp.net xml-serialization asp.net-web-api
我有一个带有2个控制器的自主Web API:
我试图在控制器初始化期间设置格式化程序,但配置似乎是全局的,影响所有控制器:
public class CustomConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings settings,
HttpControllerDescriptor descriptor)
{
settings.Formatters.XmlFormatter.UseXmlSerializer = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
Mar*_*nes 10
你走在正确的轨道上.但是您需要XmlMediaTypeFormatter在配置属性中初始化一个新实例,否则会影响全局引用.
如您所知,您需要根据IControllerConfiguration界面创建2个属性.
public class Controller1ConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings,
HttpControllerDescriptor controllerDescriptor)
{
var xmlFormater = new XmlMediaTypeFormatter {UseXmlSerializer = true};
controllerSettings.Formatters.Clear();
controllerSettings.Formatters.Add(xmlFormater);
}
}
public class Controller2ConfigAttribute : Attribute, IControllerConfiguration
{
public void Initialize(HttpControllerSettings controllerSettings,
HttpControllerDescriptor controllerDescriptor)
{
var xmlFormater = new XmlMediaTypeFormatter();
controllerSettings.Formatters.Clear();
controllerSettings.Formatters.Add(xmlFormater);
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用相关属性装饰控制器
[Controller1ConfigAttribute]
public class Controller1Controller : ApiController
{
[Controller2ConfigAttribute]
public class Controller2Controller : ApiController
{
Run Code Online (Sandbox Code Playgroud)
我认为你可以写一个自定义ActionFilterAttribute。
在 中OnActionExecuting,将原始值存储在 HttpContext 中,然后在 中OnActionExecuted,恢复原始值。
| 归档时间: |
|
| 查看次数: |
2391 次 |
| 最近记录: |