【问题标题】:Self-host Asp.net Web API in .Net 6.0 project.Net 6.0 项目中的自托管 Asp.net Web API
【发布时间】:2022-01-22 02:38:52
【问题描述】:

我想向现有的 .net 后端进程添加一个简单的 Web API。该项目已经更新到 .net 6.0,我想留在 6.0。我不知道如何向我的项目添加正确的引用,以便能够在我的进程中自托管 Web api。

目标是让一个可执行文件(大部分)复制到一个小型嵌入式 linux 系统,其中后端和一个网络服务器(提供静态文件并充当所服务前端的后端)。

“旧”教程 (.net 5.0) 建议添加对 nuget 包“Microsoft.AspNet.WebApi.OwinSelfHost”的引用,但似乎该包没有过渡到 6.0。 (安装时出现错误,抱怨目标框架不受支持)

【问题讨论】:

  • this source code 对你有用吗?
  • @JasonPan 这是我发现的关于这个主题的至少一些信息的唯一来源,但它基本上归结为将你的 sdk 项目类型从“Microsoft.NET.Sdk”更改为“Microsoft.NET” .Sdk.Web”(参见github.com/NetCoreTemplates/selfhost/blob/master/MyApp/…)。我希望我可以直接添加一些 nuget 包。
  • 还有一件事:以这种方式更改项目类型并开始调试您的应用程序后,一旦创建了包含 IIS Express 的附加设置的 launchSettings.json 文件,可以简单地删除这些设置以防止运行 IIS Express .只需将您的项目名称部分保留在“配置文件”中即可。
  • 我的回答对你有用吗?如果我的回复有帮助,请接受它作为答案(点击回复旁边的标记选项将其从灰色切换为填写。),请参阅meta.stackexchange.com/questions/5234/…

标签: c# .net asp.net-core asp.net-web-api


【解决方案1】:

你可以在.Net6中使用Microsoft.AspNetCore.Owin

测试结果


Program.cs

using Microsoft.AspNetCore.Hosting;

namespace selfhost
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseUrls("http://*:5000")
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace selfhost
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app)
        {
            app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

控制器文件

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace selfhost.Controller
{
    public class SayHiController : ControllerBase
    {
        [Route("sayhi/{name}")]
        public IActionResult Get(string name)
        {
            return Ok($"Hello {name}");
        }
        [Route("getguid")]
        public IActionResult GetGuid(string name)
        {
            return Ok($"{Guid.NewGuid().ToString()}");
        }
    }
}

【讨论】:

    猜你喜欢
    • 2023-01-07
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多