如何为现有的Asp.NET Web API项目设置控制台自托管项目

时间:2019-06-24 23:30:46

标签: c# asp.net-web-api console-application self-hosting web-project

我有ASP.NET Web应用程序。该模板创建默认的Web API控制器ValuesController。我正在尝试使用Microsoft.AspNet.WebApi.OwinSelfHost版本5.2.6创建控制台应用程序以进行自我托管。解决方案结构如下:

enter image description here

SelfHost.Server中的Startup.cs,同意!一个不好的名字,看起来像:

HttpConfiguration config = new HttpConfiguration();

        config.Routes.MapHttpRoute(
            "DefaultApi",
            "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional });

        app.UseWebApi(config);

这就是我的使用方式:

static void Main(string[] args)
    {
        var uri = "http://localhost:44382/";
        using (WebApp.Start<Startup>(uri))
        {
            Console.WriteLine($"Server started at {uri} on {DateTime.Now}");

            HttpClient client = new HttpClient();
            var response = client.GetAsync(uri + "api/values").Result;
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);

            Console.ReadKey();
        }
    }

正在运行的控制台应用程序出现此错误:

  

{“ Message”:“未找到与请求URI'http://localhost:44382/api/values'匹配的HTTP资源。”,“ MessageDetail”:“未找到与名为'values'的控制器匹配的类型。”} < / p>

使用邮递员会收到“无法得到任何回复”

问题,请问我该怎么做?

1 个答案:

答案 0 :(得分:0)

不管我们是否应该这样做。有很多方法,但是这里是我遵循的步骤: (创建的新项目的名称与原始问题中的名称不同)

创建Web api项目WebApplication1(我在Visual Studio中使用了现有模板)。创建控制台应用程序ConsoleApp1。将WebApplication1的引用添加到ConsoleApp1中。将Microsoft.AspNet.WebApi.OwinSelfHost nuget包添加到ConsoleApp1。 将program.cs中的主要方法更新为:

var baseAddress = "http://localhost: 44358/";
        using (WebApp.Start<Startup>(baseAddress))
        {
            Console.WriteLine("Server started at:" + baseAddress);
            Console.ReadLine();
        }

将startup.cs添加到ConsoleApp1,在其中添加以下代码:

public void Configuration(IAppBuilder app)
    {
        // Configure Web API for self-host.
        var config = new HttpConfiguration();
        WebApplication1.WebApiConfig.Register(config);
        app.UseWebApi(config);
    }

使用邮递员或任何客户端测试端点http://localhost:44358/api/values

结论:我们可以做到。我使用了从WebApplication1到ConsoleApp1的配置。类似地,其他配置例如统一性,过滤器等可以根据需要重复使用。

示例输出(使用邮递员):

enter image description here