我在Visual Studio 2019中有一个包含两个项目的解决方案:
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方法来解决此问题,但随后出现以下错误:
'在应用程序的预启动期间无法调用此方法 初始化阶段。
感谢您的帮助。
答案 0 :(得分:0)
我通过将原始代码迁移到WebAPI 2方式(由Chris Pickford建议)解决了这一问题。现在编写如下,并且可以正常工作:
Startup.cs:
public void Configuration(IAppBuilder app)
{
...
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
...
}