簡體   English   中英

.NET 6 中的自托管 Web API

[英]Self-Hosted Web API in .NET 6

我需要向現有庫添加一個非常簡單的 Web API,以便 Python 可以與應用程序通信。 簡單的請求/JSON 響應。 這比最初想象的更具挑戰性。 我習慣了 NodeJS,像 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

安裝:Microsoft.AspNet.WebApi.OwinSelfHost

主要的

 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();
            }
        }

啟動

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);
    }
}

控制器

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)
        {
        }
    }

看起來很簡單,但是,它在 .NET 6 中不起作用。似乎存在兼容性問題。

我偶然發現了以下線程:

.NET Core 中的自托管 OWIN

在啟動 .Net Core 2.0 上使用 Owin 時遇到 NullReferenceException - 設置?

但是,我正在努力尋找關於如何在現有 .NET 6 庫中部署簡單 Web API 的實用答案。 建議的解決方法對我不起作用。

任何建議將被認真考慮 ? 我應該去不同的圖書館嗎? ASP.NET 不是正確的工具嗎?

ASP.NET Core 內置並默認啟用 Web 服務器 - Kestrel ,因此無需設置 OWIN。 簡單的設置可以這樣看( WebApplication.CreateBuilder在內部調用UseKestrel ):

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

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

app.Run();

也可以看看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM