在?Net7.0?環(huán)境下如何使用?RestSharp?發(fā)送?Http(FromBody和FromForm)請求
一、簡介
最近,在做一個數(shù)據(jù)傳輸?shù)姆?wù),我在一個Worker Service里面需要訪問 WebAPI 接口,并傳輸數(shù)據(jù),也可以提交數(shù)據(jù)。由于第一次使用 RestSharp 發(fā)送請求,也遇到了很多問題,不過最終把問題都解決了。什么東西都一樣,第一次做都會才很多坑。
今天,我就兩個小的知識點,就是通過使用 RestSharp 訪問 WebAPI,提交 FromBody 和 FromForm 兩種方式的數(shù)據(jù),還是有些區(qū)別的。
我當(dāng)初也搞了一段時間。
我先說一下我的編碼環(huán)境:
操作系統(tǒng):Windows 10 Professional
開發(fā)工具:Visual Studio 2022
客戶端程序:Worker Service
服務(wù)端程序:Net Core WebAPI
框架版本:Net7.0
二、我的代碼
以下我就介紹一下,使用 RestSharp、以FromBody 和 FromForm 兩種方式提交數(shù)據(jù)的實現(xiàn),廢話不多說,直接上代碼。如果是重點代碼,我會以紅色標注。
WebAPI 端的代碼:
[HttpPost]
public async Task<CommonJsonResult<string>> AddOrUpdateScannerSetting([FromBody]/[FromForm] ScannerSettingInputDto inputDto)
{
}其他的代碼不用細看,都是我的邏輯代碼。
Worker Service 端的代碼:
using (RestClient restClient = new RestClient())
{
var updateScannerSettingRequest = new RestRequest(new Uri(updateScannerSettingUrl), Method.Post);
updateScannerSettingRequest.AddHeader("Authorization", "Bearer " + token);//增加的 JWT 認證
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;
}
}還有一個輔助類型:
/// <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)請求的文章就介紹到這了,更多相關(guān)RestSharp 發(fā)送 Http請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net core標簽助手的高級用法TagHelper+Form
這篇文章主要為大家詳細介紹了asp.net core標簽助手的高級用法TagHelper+Form,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
ASP.NET實現(xiàn)讀取Excel內(nèi)容并在Web上顯示
這篇文章主要介紹了ASP.NET實現(xiàn)讀取Excel內(nèi)容并在Web上顯示,很實用的一個技巧,需要的朋友可以參考下2014-08-08
c# 操作符?? null coalescing operator
?? "null coalescing" operator 是c#新提供的一個操作符,這個操作符提供的功能是判斷左側(cè)的操作數(shù)是否是null,如果是則返回結(jié)果是右側(cè)的操作數(shù);非null則返回左側(cè)的操作數(shù)。2009-06-06
ASP.NET通用權(quán)限驗證的實現(xiàn)代碼思路
這篇文章主要介紹了ASP.NET通用權(quán)限驗證的實現(xiàn)代碼思路,需要的朋友可以參考下2015-12-12
C#開發(fā)微信 二維碼鼠標滑動 圖像顯示隱藏效果(推薦)
客戶端微信在二維碼狀態(tài)下,鼠標滑過,會有一張手機的圖片滑動滑出,從隱藏到顯示,從顯示到隱藏。效果非常棒,本文思路介紹明確,感興趣的朋友一起看看吧2016-11-11
C# .Net動態(tài)調(diào)用webService實現(xiàn)思路及代碼
動態(tài)調(diào)用web服務(wù)將執(zhí)行以下步驟:獲取WSDL/生成客戶端代理類代碼/設(shè)定編譯參數(shù)/編譯代理類/生成代理實例,并調(diào)用方法,很詳細的,感興趣的你可不要錯過了哈2013-02-02
IIS上部署Asp.net core Webapi的實現(xiàn)步驟
ASP.NET Core Web API是構(gòu)建RESTful應(yīng)用程序的理想平臺,本文主要介紹了IIS上部署Asp.net core Webapi的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下2024-07-07

