国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

武裝你的WEBAPI-OData與DTO

這篇具有很好參考價值的文章主要介紹了武裝你的WEBAPI-OData與DTO。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文屬于OData系列文章

Intro

前面寫了很多有關(guān)OData使用的文章,很多讀者會有疑問,直接將實體對象暴露給最終用戶會不會有風(fēng)險?$expand在默認(rèn)配置的情況下,數(shù)據(jù)會不會有泄露風(fēng)險?

答案是肯定的,由于OData的特性,提供給我們便捷同時也會帶來一些風(fēng)險。很多地方推薦使用DTO模式來隔離實體類與最終用戶使用到類的關(guān)系,從而解決以上兩個問題,OData同樣也適用。

DTO

DTO代表Data Transfer Object,是一種設(shè)計模式,用于在不同層之間傳輸數(shù)據(jù)。它通常用于將數(shù)據(jù)從一個應(yīng)用程序的邏輯層傳輸?shù)搅硪粋€應(yīng)用程序的界面層或持久化層,以及在分布式系統(tǒng)中傳輸數(shù)據(jù)。

DTO對象是純數(shù)據(jù)對象,它包含要從一個應(yīng)用程序傳輸?shù)搅硪粋€應(yīng)用程序的數(shù)據(jù)。它不包含業(yè)務(wù)邏輯或數(shù)據(jù)訪問代碼,因此它們不能直接與數(shù)據(jù)庫交互或執(zhí)行任何操作,而只是簡單地保存數(shù)據(jù)。

DTO對象通常由開發(fā)人員創(chuàng)建,并且可以根據(jù)需要進(jìn)行擴(kuò)展。它們可以包含各種屬性和方法,以提供使用方便和更好的可讀性。使用DTO對象可以降低耦合度,使不同層之間的數(shù)據(jù)傳輸更加簡單和安全。

AutoMapper

我們需要將實體對象與DTO進(jìn)行轉(zhuǎn)換,對于需要轉(zhuǎn)換數(shù)量不是很多的情況,直接編寫一個轉(zhuǎn)換函數(shù)就方便了。

    public static class DeviceDataExtension
    {
        public static DeviceDataDto ToDeviceDataDto(this Datum deviceData)
        {
            if (deviceData == null) return null;
            DeviceDataDto deviceDataDto = new()
            {
                DataArray = deviceData.DataArray,
                DeviceId = deviceData.DeviceId,
                Timestamp = deviceData.Timestamp,
                Id = Guid.NewGuid().ToString()
            };
            return deviceDataDto;
        }
    }

但是如果需要映射的屬性很多,或者有很多對象的情況,建議使用對象映射工具:AutoMapper?;A(chǔ)用法不詳細(xì)說了,講講對OData的支持。

首先安裝對OData支持的包,由于我使用默認(rèn)的DI,還需要安裝DI支持的包:

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
Install-Package AutoMapper.AspNetCore.OData.EFCore

然后有三個要求:

  • 一定要對對象聲明顯示展開(explicit expansion)。
  • 調(diào)用IMapper的GetAsync()或者GetQueryAsync()方法。
  • 不能在Controller或者方法上使用[EnableQuery]特性:這個我熟,因為GetQueryAsync()函數(shù)需要利用ODataQueryOptions參數(shù),如果同時使用[EnableQuery]會導(dǎo)致對結(jié)果再進(jìn)行一次篩選,導(dǎo)致返回數(shù)據(jù)錯誤。

代碼:

            services.AddAutoMapper(option =>
            {
                option.CreateMap<Datum, DeviceDataDto>()
                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid().ToString()))
                .ForPath(dest => dest.DataArray, opt => opt.MapFrom(src => src.DataArray))
                .ForAllMembers(w => w.ExplicitExpansion());
            });

        public DeviceDatasController(IMapper mapper)
        {
            _mapper = mapper;
        }
        
        [HttpGet]
        [ProducesResponseType(typeof(IEnumerable<DeviceDataDto>), Status200OK)]
        public async Task<IActionResult> GetAsync(string key, ODataQueryOptions<DeviceDataDto> options)
        {
            var insp = await _context.DeviceData.Where(w => w.DeviceId == key).GetQueryAsync(_mapper, options);
            return Ok(insp);
        }

這樣,我們就可以正常使用 OData,同時也享受了的 DTO 的好處,即可以對 DeviceDataDto 使用的 OData 查詢。使用的時候要注意,如果有導(dǎo)航屬性,導(dǎo)航屬性也需要配置映射。文章來源地址http://www.zghlxwxcb.cn/news/detail-436285.html

參考資料

  • AutoMapper/AutoMapper.Extensions.OData: Creates LINQ expressions from ODataQueryOptions and executes the query. (github.com)

到了這里,關(guān)于武裝你的WEBAPI-OData與DTO的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • OData WebAPI實踐-與ABP vNext集成

    OData WebAPI實踐-與ABP vNext集成

    本文屬于 OData 系列文章 ABP 是一個流行的 ASP. NET 開發(fā)框架,舊版的的 ABP 已經(jīng)能夠非常好的支持了 OData ,并提供了對應(yīng)的 OData 包。 ABP vNext 是一個重新設(shè)計的,面向微服務(wù)的框架,提供了一些非常有用的特性,包括分頁查詢等但是它并不能原生支持 OData ,我們需要自行實現(xiàn)

    2024年02月04日
    瀏覽(18)
  • OData WebAPI實踐-Non-EDM模式

    OData WebAPI實踐-Non-EDM模式

    本文屬于OData系列文章 前文說到了 EDM 與 OData 之間的關(guān)系,具有 EDM 的 OData 提供了強大的查詢能力,但是 OData 并不必須要配置 EDM ,我們也可以使用 Non-EDM 方案。 所謂 Non-EDM ,并不是說在 OData 運行時不需要 EDM 配置了,而是由 OData 動態(tài)生成的 EDM ,進(jìn)而實現(xiàn) OData 功能。 配置

    2024年02月04日
    瀏覽(14)
  • 【Cesium創(chuàng)造屬于你的地球】相機(jī)系統(tǒng)

    【Cesium創(chuàng)造屬于你的地球】相機(jī)系統(tǒng)

    相機(jī)系統(tǒng)里面有 setView,flyTo,lookAt,viewBoundingsphere 這幾種方法,以下是相關(guān)的使用方法,學(xué)起來?。?! 該方法可以直接切換相機(jī)視口,從而不需要通過一個飛入的效果切換 flyTo該方法可以直接切換相機(jī)視口,從而不需要通過一個飛入的效果切換 方法使用,lookAt方法一般適用

    2024年02月06日
    瀏覽(23)
  • 10分鐘訓(xùn)練屬于你的AI變聲器

    10分鐘訓(xùn)練屬于你的AI變聲器

    今天推薦一款開源AI變聲器,安裝過程很友好,不用經(jīng)歷各種麻煩的環(huán)境問題, 作者提供了windows下的安裝包,一鍵安裝啟動很方便。 目前好像對顯卡有要求,nvidia顯卡支持,amd顯卡不支持。 功能特點 使用top1檢索替換輸入源特征為訓(xùn)練集特征來杜絕音色泄漏 即便在相對較差

    2024年02月16日
    瀏覽(93)
  • 零基礎(chǔ),零成本,部署一個屬于你的大模型

    零基礎(chǔ),零成本,部署一個屬于你的大模型

    前言 看了那么多chatGPT的文章,作為一名不精通算法的開發(fā),也對大模型心癢癢。但想要部署自己的大模型,且不說沒有算法相關(guān)的經(jīng)驗了,光是大模型占用的算力資源,手頭的個人電腦其實也很難獨立部署。就算使用算法壓縮后的大模型,部署在個人電腦上,還要忍受極端

    2024年02月07日
    瀏覽(19)
  • 「AIGC」如何助力個人創(chuàng)意,打造屬于你的獨特時代?

    當(dāng)今時代,人工智能(AI)不僅僅是科幻電影中的概念,也已經(jīng)廣泛應(yīng)用于各行各業(yè)。其中,AI在創(chuàng)意領(lǐng)域的應(yīng)用越來越受到關(guān)注。從AI生成的詩歌、繪畫、音樂等作品的出現(xiàn),到AI輔助創(chuàng)意產(chǎn)生的創(chuàng)意設(shè)計、廣告營銷等領(lǐng)域的應(yīng)用,都為我們展示了AI在創(chuàng)意領(lǐng)域的無限可能。 AI生

    2024年02月11日
    瀏覽(29)
  • 外匯天眼:在交易中有多少屬于你的行情?

    外匯天眼:在交易中有多少屬于你的行情?

    期貨、股票、外匯不同的市場有著不同的特性,就一個市場而言,也不會是每一段行情都適合你。 剛剛進(jìn)入期貨、股票、外匯市場的朋友都會被其巨大的財富效應(yīng)所震懾:還有這樣賺錢的? 而且機(jī)會比比皆是,一夜暴富不是神話呀。 他們依靠自己的欣喜、陶醉、沖動進(jìn)行著

    2024年02月04日
    瀏覽(24)
  • 如何真正“不花一分錢”部署一個屬于你的大模型

    如何真正“不花一分錢”部署一個屬于你的大模型

    看了那么多chatGPT的文章,作為一名不精通算法的開發(fā),也對大模型心癢癢。但想要部署自己的大模型,且不說沒有算法相關(guān)的經(jīng)驗了,光是大模型占用的算力資源,手頭的個人電腦其實也很難獨立部署。就算使用算法壓縮后的大模型,部署在個人電腦上,還要忍受極端緩慢的

    2023年04月22日
    瀏覽(18)
  • AIGC時代,基于云原生 MLOps 構(gòu)建屬于你的大模型(上)

    AIGC時代,基于云原生 MLOps 構(gòu)建屬于你的大模型(上)

    ? 為了滿足企業(yè)在數(shù)字化轉(zhuǎn)型過程中對更新迭代生產(chǎn)力工具的需求,靈雀云近日推出了云原生 MLOps 解決方案,幫助企業(yè)快速落地AI技術(shù)、實現(xiàn)智能化應(yīng)用和服務(wù)。 隨著信息化技術(shù)的不斷發(fā)展,企業(yè)在數(shù)字化轉(zhuǎn)型的過程中,需要不斷地更新迭代生產(chǎn)力工具,從最早的將物理世界

    2024年02月11日
    瀏覽(24)
  • AIGC時代,基于云原生 MLOps 構(gòu)建屬于你的大模型(下)

    AIGC時代,基于云原生 MLOps 構(gòu)建屬于你的大模型(下)

    為了滿足企業(yè)在數(shù)字化轉(zhuǎn)型過程中對更新迭代生產(chǎn)力工具的需求,靈雀云近日推出了Alauda MLOps 解決方案,幫助企業(yè)快速落地AI技術(shù)、實現(xiàn)智能化應(yīng)用和服務(wù)。 隨著ChatGPT的爆火,越來越多的人考慮使用AI來提升我們?nèi)粘9ぷ鞯男屎唾|(zhì)量,通過對話協(xié)助生成需要的文本數(shù)據(jù)。無

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包