2 回答

TA贡献1818条经验 获得超7个赞
更新格式化程序的注册方式
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Other stuff...
var jsonFormatter = new MyJsonFormatter();
config.Formatters.Clear();
config.Formatters.Insert(0, jsonFormatter);
//...
}
}
确保在启动或应用程序启动时遵循建议的语法。
// configure Web Api
GlobalConfiguration.Configure(WebApiConfig.Register);
还有下面文章中建议的内容协商过程
在 ASP.NET Web API 中仅支持 JSON – 正确的方式
使其适应您的示例,它看起来像
public class JsonContentNegotiator : IContentNegotiator {
MediaTypeHeaderValue mediaType = MediaTypeHeaderValue.Parse("application/json;charset=utf-8");
private readonly MyJsonFormatter _jsonFormatter;
public JsonContentNegotiator(MyJsonFormatter formatter) {
_jsonFormatter = formatter;
}
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) {
var result = new ContentNegotiationResult(_jsonFormatter, mediaType);
return result;
}
}
并针对您的HttpConfiguration
var jsonFormatter = new MyJsonFormatter();
config.Formatters.Clear();
config.Formatters.Insert(0, jsonFormatter);
//update content negotiation
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
最后要注意的一条信息是该框架确实将其 JSON 格式与自己的格式紧密耦合JsonMediaTypeFormatter
/// <summary>
/// Gets the <see cref="MediaTypeFormatter"/> to use for Json.
/// </summary>
public JsonMediaTypeFormatter JsonFormatter
{
get { return Items.OfType<JsonMediaTypeFormatter>().FirstOrDefault(); }
}
参考来源
因此,取决于管道的多少实际上取决于 的实例的存在JsonMediaTypeFormatter,它可能会影响 JSON 相关的格式。
如果这实际上是一个问题,那么我的建议是根据需要派生JsonMediaTypeFormatter并覆盖其成员。
public class MyJsonFormatter : JsonMediaTypeFormatter {
//... removed for brevity
}
但这可能会带来它自己的问题,具体取决于该基类与什么耦合。
- 2 回答
- 0 关注
- 105 浏览
添加回答
举报