第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Web API 更改 JSON 解析器

Web API 更改 JSON 解析器

C#
慕桂英3389331 2022-07-23 16:37:44
我正在嘗試更改我的 Web API 項目中的 JSON 解析器。我遵循了以下教程:https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/custom-formatters?view=aspnetcore-2.2https://www.youtube.com/watch?v=tNzgXjqqIjIhttps://weblog.west-wind.com/posts/2012/Mar/09/Using-an-alternate-JSON-Serializer-in-ASPNET-Web-API我現(xiàn)在有以下代碼:public class MyJsonFormatter : MediaTypeFormatter    {        public MyJsonFormatter()        {            base.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));        }        public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)        {            return null;        }        public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)        {            return null;        }        public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType)        {            base.SetDefaultContentHeaders(type, headers, mediaType);        }        public override bool CanReadType(Type type)        {            return true;        }        public override bool CanWriteType(Type type)        {            return true;        }        public override MediaTypeFormatter GetPerRequestFormatterInstance(Type type, HttpRequestMessage request, MediaTypeHeaderValue mediaType)        {            return base.GetPerRequestFormatterInstance(type, request, mediaType);        }        public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)        {            return null;        }我的問題是,無論我做什么,JSON 都會被解析,它似乎忽略了我的代碼——我可以在讀取或?qū)懭敕椒ㄖ袙伋霎惓?,但什么都不會發(fā)生,斷點不會被命中等。我知道這個格式化程序正在被添加,因為只有我的類中的內(nèi)容類型是可見的,如果我設(shè)置CanReadType為返回 false,那么什么都不會被解析。我的問題是,我怎樣才能讓代碼執(zhí)行我的覆蓋?
查看完整描述

2 回答

?
qq_笑_17

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


}

但這可能會帶來它自己的問題,具體取決于該基類與什么耦合。


查看完整回答
反對 回復(fù) 2022-07-23
?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊

您需要在啟動配置中注冊格式化程序。



查看完整回答
反對 回復(fù) 2022-07-23
  • 2 回答
  • 0 關(guān)注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號