C# ASP.NET WEB API-CamelCasePropertyNamesContractResolver-强制忽略特定端点
我正在使用ASP.NET web api。为了为端点返回的属性提供camel case支持,我添加了以下代码: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 =
//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"
}