在?Net7.0?環(huán)境下如何使用?RestSharp?發(fā)送?Http(FromBody和FromForm)請(qǐng)求
一、簡(jiǎn)介
最近,在做一個(gè)數(shù)據(jù)傳輸?shù)姆?wù),我在一個(gè)Worker Service里面需要訪問(wèn) WebAPI 接口,并傳輸數(shù)據(jù),也可以提交數(shù)據(jù)。由于第一次使用 RestSharp 發(fā)送請(qǐng)求,也遇到了很多問(wèn)題,不過(guò)最終把問(wèn)題都解決了。什么東西都一樣,第一次做都會(huì)才很多坑。
今天,我就兩個(gè)小的知識(shí)點(diǎn),就是通過(guò)使用 RestSharp 訪問(wèn) WebAPI,提交 FromBody 和 FromForm 兩種方式的數(shù)據(jù),還是有些區(qū)別的。
我當(dāng)初也搞了一段時(shí)間。
我先說(shuō)一下我的編碼環(huán)境:
操作系統(tǒng):Windows 10 Professional
開(kāi)發(fā)工具:Visual Studio 2022
客戶端程序:Worker Service
服務(wù)端程序:Net Core WebAPI
框架版本:Net7.0
二、我的代碼
以下我就介紹一下,使用 RestSharp、以FromBody 和 FromForm 兩種方式提交數(shù)據(jù)的實(shí)現(xiàn),廢話不多說(shuō),直接上代碼。如果是重點(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ù)庫(kù)建模
這篇文章介紹了ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫(kù)建模的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
asp.net下讓Gridview鼠標(biāo)滑過(guò)光棒變色效果
Gridview光棒效果 鼠標(biāo)滑過(guò)2010-07-07
asp.net數(shù)據(jù)綁定時(shí)動(dòng)態(tài)改變值的代碼
.net數(shù)據(jù)綁定時(shí)動(dòng)態(tài)改變值2010-06-06
ASP.NET Core Web資源打包與壓縮技術(shù)介紹
這篇文章介紹了ASP.NET Core Web資源打包與壓縮技術(shù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02
先裝了FRAMEWORK,后裝IIS導(dǎo)致asp.net頁(yè)面無(wú)法訪問(wèn)的解決方法
如果先裝了FRAMEWORK,后裝IIS。有可能沒(méi)有在IIS中注冊(cè),就會(huì)導(dǎo)致在頁(yè)面中無(wú)法訪問(wèn)的情況2012-01-01
ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 應(yīng)用程序中的靜態(tài)文件中間件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

