我有ASP.NET Web应用程序。该模板创建默认的Web API控制器ValuesController。我正在尝试使用Microsoft.AspNet.WebApi.OwinSelfHost版本5.2.6创建控制台应用程序以进行自我托管。解决方案结构如下:
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>
使用邮递员会收到“无法得到任何回复”
问题,请问我该怎么做?
答案 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的配置。类似地,其他配置例如统一性,过滤器等可以根据需要重复使用。
示例输出(使用邮递员):