在?Net7.0?環(huán)境下如何使用?RestSharp?發(fā)送?Http(FromBody和FromForm)請(qǐng)求
一、簡介
最近,在做一個(gè)數(shù)據(jù)傳輸?shù)姆?wù),我在一個(gè)Worker Service里面需要訪問 WebAPI 接口,并傳輸數(shù)據(jù),也可以提交數(shù)據(jù)。由于第一次使用 RestSharp 發(fā)送請(qǐng)求,也遇到了很多問題,不過最終把問題都解決了。什么東西都一樣,第一次做都會(huì)才很多坑。
今天,我就兩個(gè)小的知識(shí)點(diǎn),就是通過使用 RestSharp 訪問 WebAPI,提交 FromBody 和 FromForm 兩種方式的數(shù)據(jù),還是有些區(qū)別的。
我當(dāng)初也搞了一段時(shí)間。
我先說一下我的編碼環(huán)境:
操作系統(tǒng):Windows 10 Professional
開發(fā)工具:Visual Studio 2022
客戶端程序:Worker Service
服務(wù)端程序:Net Core WebAPI
框架版本:Net7.0
二、我的代碼
以下我就介紹一下,使用 RestSharp、以FromBody 和 FromForm 兩種方式提交數(shù)據(jù)的實(shí)現(xiàn),廢話不多說,直接上代碼。如果是重點(diǎn)代碼,我會(huì)以紅色標(biāo)注。
WebAPI 端的代碼:
[HttpPost] public async Task<CommonJsonResult<string>> AddOrUpdateScannerSetting([FromBody]/[FromForm] ScannerSettingInputDto inputDto) { }
其他的代碼不用細(xì)看,都是我的邏輯代碼。
Worker Service 端的代碼:
using (RestClient restClient = new RestClient()) { var updateScannerSettingRequest = new RestRequest(new Uri(updateScannerSettingUrl), Method.Post); updateScannerSettingRequest.AddHeader("Authorization", "Bearer " + token);//增加的 JWT 認(rèn)證 updateScannerSettingRequest.AddHeader("Accept", "application/json"); updateScannerSettingRequest.RequestFormat = DataFormat.Json; #region [FromBody]接收,這里有兩種方式,都是可以的 1、updateScannerSettingRequest.AddParameter("application/json", JsonConvert.SerializeObject(scannerSettingInputDto), ParameterType.RequestBody); 2、updateScannerSettingRequest.AddBody(scannerSettingInputDto); #endregion #region [FromForm]接收,所有字段都需要自己添加 updateScannerSettingRequest.AddParameter("ScannerId", scannerSettingInputDto.ScannerId); updateScannerSettingRequest.AddParameter("Camera1Id", scannerSettingInputDto.Camera1Id); updateScannerSettingRequest.AddParameter("Camera2Id", scannerSettingInputDto.Camera2Id); updateScannerSettingRequest.AddParameter("Camera3Id", scannerSettingInputDto.Camera3Id); updateScannerSettingRequest.AddParameter("Camera4Id", scannerSettingInputDto.Camera4Id); updateScannerSettingRequest.AddParameter("Camera1IntegrationTime", scannerSettingInputDto.Camera1IntegrationTime); updateScannerSettingRequest.AddParameter("Camera2IntegrationTime", scannerSettingInputDto.Camera2IntegrationTime); updateScannerSettingRequest.AddParameter("Camera3IntegrationTime", scannerSettingInputDto.Camera3IntegrationTime); updateScannerSettingRequest.AddParameter("Camera4IntegrationTime", scannerSettingInputDto.Camera4IntegrationTime); updateScannerSettingRequest.AddParameter("Camera1Image", scannerSettingInputDto.Camera1Image); updateScannerSettingRequest.AddParameter("Camera2Image", scannerSettingInputDto.Camera2Image); updateScannerSettingRequest.AddParameter("Camera3Image", scannerSettingInputDto.Camera3Image); updateScannerSettingRequest.AddParameter("Camera4Image", scannerSettingInputDto.Camera4Image); updateScannerSettingRequest.AddParameter("ScannerCoordinate", scannerSettingInputDto.ScannerCoordinate); updateScannerSettingRequest.AddParameter("PatrolFile", scannerSettingInputDto.PatrolFile); updateScannerSettingRequest.AddParameter("WarningPhone", scannerSettingInputDto.WarningPhone); updateScannerSettingRequest.AddParameter("IsUpdate", scannerSettingInputDto.IsUpdate); updateScannerSettingRequest.AddParameter("Remarks", scannerSettingInputDto.Remarks); #endregion var updateScannerSettingResponse = await restClient.ExecuteAsync(updateScannerSettingRequest); var updateScannerSettingContent = updateScannerSettingResponse.Content; if (!string.IsNullOrEmpty(updateScannerSettingContent) && !string.IsNullOrWhiteSpace(updateScannerSettingContent)) { var commontResultObject = JsonConvert.DeserializeObject<CommonJsonResult<string>>(updateScannerSettingContent); if (commontResultObject != null && commontResultObject.Success) { result = true; } else { result = false; _logger.LogError(updateScannerSettingContent); } } else { result = true; } }
還有一個(gè)輔助類型:
/// <summary> /// 該類型定義了以 JSON 為返回結(jié)果的通用數(shù)據(jù)格式。 /// </summary> /// <typeparam name="TResult">結(jié)果的返回類型。</typeparam> public sealed class CommonJsonResult<TResult> { /// <summary> /// 獲取或者設(shè)置操作的結(jié)果是成功還是失敗,True 表示操作成功,F(xiàn)alse 表示操作失敗。 /// </summary> public bool Success { get; set; } /// <summary> /// 獲取或者設(shè)置操作的結(jié)果編碼值。 /// </summary> public int StateCode { get; set; } /// <summary> /// 獲取或者設(shè)置操作的提示信息。 /// </summary> public string? Message { get; set; } /// <summary> /// 獲取或者設(shè)置數(shù)據(jù)的結(jié)果。 /// </summary> public TResult? DataResult { get; set; } }
到此這篇關(guān)于在 Net7.0 環(huán)境下使用 RestSharp 發(fā)送 Http(FromBody和FromForm)請(qǐng)求的文章就介紹到這了,更多相關(guān)RestSharp 發(fā)送 Http請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫建模
這篇文章介紹了ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫建模的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04asp.net下讓Gridview鼠標(biāo)滑過光棒變色效果
Gridview光棒效果 鼠標(biāo)滑過2010-07-07asp.net數(shù)據(jù)綁定時(shí)動(dòng)態(tài)改變值的代碼
.net數(shù)據(jù)綁定時(shí)動(dòng)態(tài)改變值2010-06-06ASP.NET Core Web資源打包與壓縮技術(shù)介紹
這篇文章介紹了ASP.NET Core Web資源打包與壓縮技術(shù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02先裝了FRAMEWORK,后裝IIS導(dǎo)致asp.net頁面無法訪問的解決方法
如果先裝了FRAMEWORK,后裝IIS。有可能沒有在IIS中注冊(cè),就會(huì)導(dǎo)致在頁面中無法訪問的情況2012-01-01ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04