.net中最简单的http请求调用(比如调用chatgpt的openAI接口)

Posted digital-college

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net中最简单的http请求调用(比如调用chatgpt的openAI接口)相关的知识,希望对你有一定的参考价值。

支持.Net Core(2.0及以上)/.Net Framework(4.5及以上),可以部署在Docker, Windows, Linux, Mac。

http请求调用是开发中经常会用到的功能,因为,很多第三方功能接口往往是通过http地址的形式提供的,比如:ChatGpt、OpenAI、短信服务、在线翻译、地图服务、语音智能、等…

 

.net中调用http请求的工具很多,但本文介绍的这个,是相对使用“最简单+高效”的一个,在DeveloperSharp工具包中提供。具体说明如下。

 

http请求调用,又分为Post与Get两种形式。

Post形式的请求相对复杂一些,也更常用,一旦弄明白它, Get形式一看便懂,故我们首先来看看Post形式的请求调用。

使用Post调用http,往往有四个参数需要设置:

(1)     调用地址

(2)     需要发送过去的参数

(3)     http请求头(如果有设置)

(4)     编码格式。常用的为:application/json

 

下面给出一个使用第三方链接“发送短信”的代码示例:

using DeveloperSharp.Framework.CoreUtility; //从NuGet引用DeveloperSharp包
using Newtonsoft.Json; //从NuGet引用Newtonsoft.Json包
--------------------------

        public static object iSoftStoneSync(string mobile, string code, string name)
        
            //创建DeveloperSharp中的IUtility工具
            IUtility IU = new Utility();

            //调用地址
            string requestUrl = "https://prekaka.rainfn.com/kaka/api/v1/activity/uploadUserData";
            //需要发送的参数
            Dictionary<string, object> data = new Dictionary<string, object>
            
                 "mobile",mobile ,
                 "code",code,
                 "name",name
            ;

            //Post形式发送请求调用
            var responsesStr = IU.HttpPost(requestUrl, JsonConvert.SerializeObject(data), null, "application/json");
            object reData = JsonConvert.DeserializeObject<object>(responsesStr);
            return reData;
        

上例因为没有设置“http请求头”,故HttpPost方法的第三个参数传值为null。

 

HttpPost方法的详细说明如下:

HttpPost
声明:string HttpPost(string Url, string ParamData = "", Dictionary<string, string> HeaderDic = null, string ContentType = "application/x-www-form-urlencoded");
用途:调用Http-Post请求
参数:(1string Url             --  调用请求的url地址
     (2string ParamData      --  提交的参数
     (3)Dictionary<string, string> HeaderDic  --  存放http头的键值对
     (4string ContentType   --  请求的编码格式,通常有application/x-www-form-urlencoded(默认设置)、multipart/form-data、application/json三种形式
返回:String   --  请求结果(-107开头表示出错)

 

 

最后,我们来说说Get形式的请求调用。

Get形式往往用于url后带问号“?N1=V1&N2=V2&N3=V3”这类的调用。这类调用的特点是:“需要发送的参数”直接挂在了“调用地址”后面。下面直接给出一个示例,你一看便知:

using DeveloperSharp.Framework.CoreUtility; //从NuGet引用DeveloperSharp包
--------------------------

      IUtility ui = new Utility();
      string r = ui.HttpGet("http://localhost:1416/Handler1.ashx?name=kyyk&age=100");

 

最后说明一点,以上调用方法为同步模式,因为绝大多数程序是要依赖拿到的http调用结果返回值才能继续往下执行的。

但若遇到少数异步的情况,可自行用aynsc/await/Task包装一下就行。

ASP.Net Core 6,SPA,端点 - 我无法从 http get 请求调用控制器

【中文标题】ASP.Net Core 6,SPA,端点 - 我无法从 http get 请求调用控制器【英文标题】:ASP.Net Core 6, SPA, endpoint - I can't call a controller from http get request 【发布时间】:2022-01-16 08:48:38 【问题描述】:

[已解决] - 评论中的解决方案

[问题]

我是这个行业的新手,所以请原谅我提出一个新手问题,但我现在在 ASP.Net Core 6 上苦苦挣扎,我想我错过了一些简单的事情,但我完全被困住了...... 因此,我尝试制作一个简单的应用程序来使用 C# 和 Angular SPA 计算 BMI。我在 .Net Core 5 中做到了,它工作正常,但由于某种原因,当我从字面上一对一地复制所有功能时,它不想在 .Net Core 6 中调用控制器方法。 我开始搜索 5 和 6 版本之间的更改,我发现 Startup.cs 丢失了,相反,他们将其与 Program.cs 合并。这会是一个“问题”吗? 您可以在下面找到我的 TS 组件代码和控制器代码。 如果你能给出任何提示可能是什么问题以及为什么它适用于 5,但不适用于 6...

目前,我只想从BmiController调用Get()方法并接收200状态码,仅此而已,但是每次发送http get请求时,我都会收到404 not found。

提前感谢您的帮助:)

程序.cs

using BMICalculatorCore.Core;
using BMICalculatorCore.Core.Interfaces;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddTransient<ICalculator, MetricCalculator>();

builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())

    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();


app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.MapControllerRoute(
    name: "default",
    pattern: "controller/action=Index/id?");

app.MapFallbackToFile("index.html"); ;

bmicalculator.component.ts

import  HttpClient  from '@angular/common/http';
import  Component, OnInit  from '@angular/core';

@Component(
  selector: 'app-bmicalculator',
  templateUrl: './bmicalculator.component.html',
  styleUrls: ['./bmicalculator.component.css']
)


export class BmicalculatorComponent implements OnInit 

  public unit: string;

  constructor(private http: HttpClient) 
    this.unit = "Metric";
  

  ngOnInit(): void 
  

  sendRequest() 
    this.http.get("https://localhost:44431/" + "bmictrl" + "/calculate").subscribe(result => 
    , error => console.error(error));
  

BmiController.cs

using Microsoft.AspNetCore.Mvc;

namespace BMICalculatorCore.Controllers

    [ApiController]
    [Route("bmictrl")]
    public class BmiController : ControllerBase
    
        public BmiController()
        
            
        

        [HttpGet]
        [Route("calculate")]
        public IActionResult Get()
        
            return Ok();
        
    

【问题讨论】:

您的应用程序是否在 https://localhost:44431 上运行?当您在浏览器中浏览https://localhost:44431/bmictrl/calculate 时会发生什么? 是的,应用程序在端口上运行,检查。当我浏览localhost:44431/bmictrl/calculate 时出现空白页面。邮递员说:“无法获取 /bmictrl/calculate” 如果您解决了您的问题,您可以自行回答以分享您的解决方法! 【参考方案1】:

我解决了这个问题。看来,当 VS 创建项目时,它还为所有控制器(路径)创建了代理。当我创建新控制器时,代理丢失了,这就是找不到端点的原因。我所做的是:

const  env  = require('process');

const target = env.ASPNETCORE_HTTPS_PORT ? `https://localhost:$env.ASPNETCORE_HTTPS_PORT` :
  env.ASPNETCORE_URLS ? env.ASPNETCORE_URLS.split(';')[0] : 'http://localhost:21346';

const PROXY_CONFIG = [
  
    context: [
      "/weather",
      "/bmicalc", // this was added
      "/helloworld", // this was added
      "/bmicalculator" // this was added
   ],
    target: target,
    secure: false
  
]

module.exports = PROXY_CONFIG;

添加代理允许应用程序访问端点。五分钟的工作,半天的搜索……

【讨论】:

以上是关于.net中最简单的http请求调用(比如调用chatgpt的openAI接口)的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core 6,SPA,端点 - 我无法从 http get 请求调用控制器

Swagger+AutoRest

转Java模拟http请求,调用外部api接口:HttpURLConnection和HttpClient的区别

SQL CLR 存储过程调用 Web 服务接收 System.Net.WebException:请求失败,HTTP 状态 415:不支持的媒体类型

请求失败,HTTP 状态 401:未授权

发送Http请求调用webService