[英]Ignore controller in ASP.NET Web API
[英]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.