运行WebApi项目的OWIN SelfHost项目未调用Application_Start方法

时间:2019-07-18 12:15:58

标签: c# asp.net-web-api owin self-host-webapi

我在Visual Studio 2019中有一个包含两个项目的解决方案:

  1. C#类库(一个WebAPI项目)
  2. 一个 C#控制台应用程序(一个OWIN SelfHost项目,指的是项目1)

SelfHost项目的唯一目的是WebAPI 可以在没有Visual Studio的情况下运行

当我在Visual Studio中运行 WebAPI 项目时,一切正常。提供了静态内容,我可以通过浏览器调用其ApiControllers。

当我运行 SelfHost 项目时,浏览器无法调用/访问ApiController。这可能是因为 Global.asax 中的以下代码未执行。 Application_Start 方法不会被调用:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

因此,未执行将控制器链接到URI的机制:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

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

因此可以解释症状,但如何解决? 我试图通过从SelfHost项目中手动调用GlobalConfiguration.Configure方法来解决此问题,但随后出现以下错误:

  

'在应用程序的预启动期间无法调用此方法   初始化阶段。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我通过将原始代码迁移到WebAPI 2方式(由Chris Pickford建议)解决了这一问题。现在编写如下,并且可以正常工作:

Startup.cs:

public void Configuration(IAppBuilder app)
{
    ...
    var config = new HttpConfiguration();
    config.MapHttpAttributeRoutes();
    app.UseWebApi(config);
    ...
 }