首页 > 其他分享 >NET 6中的自托管Web API

NET 6中的自托管Web API

时间:2023-05-07 21:57:02浏览次数:39  
标签:API Web api values NET public

原文:NET 6中的自托管Web API - 我爱学习网 (5axxw.com)

我需要向现有库中添加一个非常简单的Web API,以便Python可以与应用程序通信。简单的请求/JSON响应。这比最初想象的更具挑战性。我习惯了NodeJ,在那里像Express这样的库只需几行代码就可以做到这一点。

显然,web服务器需要集成到图书馆中。我不能依赖IIS或任何web服务器。

这些教程遍布网络:

https://github.com/jbogard/Docs/blob/master/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api.md

Install: Microsoft.AspNet.WebApi.OwinSelfHost

Main

 static void Main(string[] args)
        {
            string baseAddress = "http://localhost:9000/";

            // Start OWIN host 
            using (WebApp.Start<Startup>(url: baseAddress))
            {
                // Create HttpCient and make a request to api/values 
                HttpClient client = new HttpClient();

                var response = client.GetAsync(baseAddress + "api/values").Result;

                Console.WriteLine(response);
                Console.WriteLine(response.Content.ReadAsStringAsync().Result);
                Console.ReadLine();
            }
        }

Startup

public class Startup
{
    // This code configures Web API. The Startup class is specified as a type
    // parameter in the WebApp.Start method.
    public void Configuration(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host. 
        HttpConfiguration config = new HttpConfiguration();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        appBuilder.UseWebApi(config);
    }
}

Controller

public class ValuesController : ApiController
    {
        // GET api/values 
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5 
        public string Get(int id)
        {
            return "value";
        }

        // POST api/values 
        public void Post([FromBody] string value)
        {
        }

        // PUT api/values/5 
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE api/values/5 
        public void Delete(int id)
        {
        }
    }

它看起来很简单,但在.NET6中不起作用。似乎存在兼容性问题。

我偶然发现threads,如下所示:

NET内核中的自托管OWIN

启动时Owin遇到NullReferenceException。Net Core 2.0-设置?

然而,对于如何在现有的.NET6库中部署简单的Web API,我正在努力找到一个实用的答案。建议的解决方法不适合我。

如有任何建议,我们将不胜感激?我宁愿去另一个图书馆吗?ASP.NET不是正确的工具吗?

 发布于 9 月前   ✅ 最佳回答: avatar

ASP.NETCore内置了默认的web服务器Kestrel,因此不需要设置OWIN。简单的设置可以这样看(UseKestrel在内部由WebApplication.CreateBuilder调用):

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

See also:

  • 托管并部署ASP.NET核心。
  • Servers
  • 使用ASP.NET核心共享框架

标签:API,Web,api,values,NET,public
From: https://www.cnblogs.com/bruce1992/p/17380239.html

相关文章

  • Weblogic11g安装部署-winserver篇
    目录一、安装weblogic11g1.1找到下载好的weblogic11g1.2打开安装程序wls1033_oepe111150_win32.exe,并完成初始化如下图1.3点击下一步并选择安装路径,这里选择d:\bea11g1.4把“我希望通过MyOracleSupport接收安全更新”方框前的勾去掉,其他选择默认安装即可1.5直到出现如下界面,......
  • (六) Java API查询与算数运算符练习
    目录API在线文档算数练习题API在线文档各种API集合不过有了chatgpt这些都是弟弟了算数练习题i=i++publicclassInt{ publicstaticvoidmain(String[]args){ inti=1; i=i++; System.out.println(i); }}这里的输出应该是1,因为i=i++这句规则......
  • 黑马 2-javaweb 学习随记
    day08 1:启动tomcat失败121-Oct-202213:41:57.148严重[main]org.apache.catalina.util.LifecycleBase.handleSubClassException初始化组件[Connector[HTTP/1.1-8080]]失败。2org.apache.catalina.LifecycleException:协议处理程序初始化失败3......
  • .NET 6学习笔记(8)生成自签证书
    上一篇我们通过导出IISExpress的自签证书,供ASP.NETCore程序启用HTTPS。本篇我们讨论如何生成自签证书。自签证书的生成,有多种方式。比如OpenSSL或PowerShell都可以通过命令生成证书。对于.NET程序,也有System.Security.Cryptography.X509Certificates命名空间下,对应的C#类来实现......
  • 【web 开发基础】PHP 中数组的定义和使用
    前言在PHP中定义数组非常灵活。与其他许多编程语言中的数组不同,PHP不需要在创建数组时指定数组的大小和类型,甚至无需再使用数组前先行声明,也可以在同一个数组中存储任何类型的数据,PHP支持一维和多维数组,可以由用户创建,也可以由一些特定的数据库处理函数从数据库查询中生成数组,或者......
  • 第10章:10W QPS真刀实操__以及基于ZK+Netty手写分布式测试工具 177手机路人甲账号 主目
    10WQPS真刀实操__以及基于ZK+Netty手写分布式测试工具参考链接系统架构知识图谱(一张价值10w的系统架构知识图谱)https://www.processon.com/view/link/60fb9421637689719d246739秒杀系统的架构https://www.processon.com/view/link/61148c2b1e08536191d8f92f10WQPS真刀实......
  • 在web中使用json json异常
    今天在web中使用Jacjson将后端对象转换为json类型传输,在pom中导入依赖,代码中也可以引用,启动tomcat后发现启动失败,报jackson的异常。以为是jacson和spring的版本冲突问题,换版本,也是不能启动。换了fastjson后在代码中导入包,发现不能正常弹出方法引用,突然发觉,可能是tomcat的lib目录没......
  • 使用IDEA2023创建springMVC项目,web项目
    1.使用idea2022创建web项目 2.新建模块 3.编写文件名,记住如果想单独一个项目,不想被包括在其他项目里面就取消位置后面的地址,它有可能是上一个项目的主文件 4.创建完主要项目以后要添加web模块,先选中需要添加web项目的模块,再店家上方+号,选择 web模块 3.修改部......
  • .NET周报 【4月第5期 2023-04-30】
    国内文章基于Github平台的.NET开源项目模板.嘎嘎实用!https://www.cnblogs.com/NMSLanX/p/17326728.html大家好,为了使开源项目的维护和管理更方便一些,出于个人需求写了一款开源项目的模板,该模板基于Github平台,并使用.NET来实现管道功能.在接受过实战检验后,于今......
  • zabbix基于api方式批量创建监控项和触发器示例
    基于python3zabbixapi方式,达到批量创建指定机器业务端口的监控项和触发器的创建的效果,目前不支持并发处理,只支持串行处理zabbix-net-server.py内容,放到zabbix服务器上,然后执行python3 zabbix-net-server.py启动socket监听#!/usr/bin/python3importsocket,sys,timeimport......