1

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

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

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

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

当我运行SelfHost项目时,浏览器无法调用/访问 ApiControllers。这可能是因为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 方法来解决此问题,但随后出现以下错误:

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

任何帮助表示赞赏。

4

1 回答 1

0

我通过将我的原始代码迁移到 WebAPI 2 方式来解决它(正如 Chris Pickford 所建议的那样)。它现在写成如下并且它可以工作:

启动.cs:

public void Configuration(IAppBuilder app)
{
    ...
    var config = new HttpConfiguration();
    config.MapHttpAttributeRoutes();
    app.UseWebApi(config);
    ...
 }
于 2019-07-18T13:32:29.650 回答