我正在创建一个基本的WebAPI控制器,我的大多数控制器都是固有的。该控制器需要通过添加特定的Json Contract解析器来修改JsonSerializerSettings。
在控制器本身内执行此操作非常重要,因为在创建合同时,我需要访问HttpRequest以及注入的服务。
目前我只是覆盖Ok(对象值)方法:
public override OkObjectResult Ok(object value)
{
var resolver = new TranslationContractResolver(_translationService, language);
// serialize the object, and in doing so will translate all translatable properties.
string json = JsonConvert.SerializeObject(
value,
Formatting.None,
new JsonSerializerSettings { ContractResolver = resolver });
// now, deserialize back so we can respect content requests (XML, etc).
Type type = value.GetType();
var deserializedBack = JsonConvert.DeserializeObject(json, type);
return base.Ok(deserializedBack);
这确实有效,但我确信我的表现受到了打击。
我想在OnActionExecuting方法中添加合约解析器,但我不知道如何以正确的方式访问JsonOptions配置。我已经能够从HttpContext获取IServiceProvider,然后从提供程序中获取IOptions(JsonOptions),并直接覆盖SerializationSettings。但这似乎非常hacky,它似乎在其他控制器中保留了响应的设置。