Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET WEB API-CamelCasePropertyNamesContractResolver-强制忽略特定端点_C#_Asp.net_Asp.net Web Api_Asp.net Web Api2_Asp.net Web Api Filters - Fatal编程技术网

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

C# ASP.NET WEB API-CamelCasePropertyNamesContractResolver-强制忽略特定端点,c#,asp.net,asp.net-web-api,asp.net-web-api2,asp.net-web-api-filters,C#,Asp.net,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Filters,我正在使用ASP.NET web api。为了为端点返回的属性提供camel case支持,我添加了以下代码: //Support camel casing var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); jsonFormatter.SerializerSettings.ContractResolver =

我正在使用ASP.NET web api。为了为端点返回的属性提供camel case支持,我添加了以下代码:

//Support camel casing
            var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().FirstOrDefault();
            jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//支持驼峰式套管
var jsonFormatter=config.Formatters.OfType().FirstOrDefault();
jsonFormatter.SerializerSettings.ContractResolver=新的CamelCasePropertyNamesContractResolver();

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

如果应用全局
驼峰配置,则无法进行控制
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"
}
注意如果您想在整个控制器上轻松控制camelCase,请尝试将您希望它发送回答案的操作与控制器中的非camelCase分开,但对于其他操作,如果需要,请在控制器级别应用此过滤器。
更多您应该删除GlobalConfiguration以获得此

+1。谢谢你的回复。我知道这个选择。但我不想删除全局设置,然后在每个端点上添加过滤器属性,除非我真的必须这样做。我会再等一段时间。
{
    "prop1": "123",
    "prop2": "3ERr"
}