繁体   English   中英

ASP.NET WEB API-CamelCasePropertyNamesContractResolver-强制忽略特定端点

[英]ASP.NET WEB API - CamelCasePropertyNamesContractResolver - force to ignore specific endpoints

我正在使用ASP.NET Web API。 为了支持端点返回的属性的驼峰大小写,我添加了以下代码:

//Support camel casing
            var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();
            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

这工作正常,但我想为其中一个端点添加一个例外。 这将确保从该端点返回数据时,不会使用驼峰式大小写。 如何添加此异常或单个端点?

如果要应用全局camel case configuration AFAK,则无法进行控制,唯一的方法是使用ActionFilterAttribute ,如下所示

public class CamelCasingFilterAttribute:ActionFilterAttribute
    {
        private JsonMediaTypeFormatter _camelCasingFormatter = new JsonMediaTypeFormatter();

        public CamelCasingFilterAttribute()
        {
            _camelCasingFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        }

        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            ObjectContent content = actionExecutedContext.Response.Content as ObjectContent;
            if (content != null)
            {
                if (content.Formatter is JsonMediaTypeFormatter)
                {
                    actionExecutedContext.Response.Content = new ObjectContent(content.ObjectType, content.Value, _camelCasingFormatter);
                }
            }
        }
    }



  public class ValuesController : ApiController
    {
        // GET api/values
        [CamelCasingFilter]
        public IEnumerable<Test> Get()
        {
            return new Test[] {new Test() {Prop1 = "123", Prop2 = "3ERr"}, new Test() {Prop1 = "123", Prop2 = "3ERr"}};  
        }

        // GET api/values/5

        public Test Get(int id)
        {

            return new Test() {Prop1 = "123", Prop2 = "3ERr"};  
        }
    }

    public class Test
    {
        public string Prop1 { get; set; }
        public string Prop2 { get; set; }
    }

如果您尝试执行第一个动作,答案将如下

[{"prop1":"123","prop2":"3ERr"},{"prop1":"123","prop2":"3ERr"}]

在没有过滤器的情况下进行第二个操作,您将得到类似以下的内容

{
    "prop1": "123",
    "prop2": "3ERr"
}

请注意,如果要简化整个控制器上的camelCase的控制,请尝试将希望其返回给控制器中非CamelCase的答案的操作分开放置,但对于其余情况,请在控制器级别上应用此Filter你要。 更多,您应该删除GlobalConfiguration以获得此信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM