2 回答

TA貢獻(xiàn)1818條經(jīng)驗 獲得超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);
//...
}
}
確保在啟動或應(yīng)用程序啟動時遵循建議的語法。
// configure Web Api
GlobalConfiguration.Configure(WebApiConfig.Register);
還有下面文章中建議的內(nèi)容協(xié)商過程
在 ASP.NET Web API 中僅支持 JSON – 正確的方式
使其適應(yīng)您的示例,它看起來像
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 相關(guān)的格式。
如果這實際上是一個問題,那么我的建議是根據(jù)需要派生JsonMediaTypeFormatter并覆蓋其成員。
public class MyJsonFormatter : JsonMediaTypeFormatter {
//... removed for brevity
}
但這可能會帶來它自己的問題,具體取決于該基類與什么耦合。
- 2 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報