我有一个相对简单的 WebApi 站点,带有几个控制器,在 OWIN 中运行,AutoFac 作为 DI 容器。
该站点仅使用属性路由设置,但即使我们遇到无效路由,也始终返回 200 OK 响应。我们还运行了一些过滤器和静态文件服务器,但我已经注释掉了启动文件中的所有代码(所有 IAppBuilder 调用甚至是 HttpConfiguration 的创建),但我们仍然会遇到这种情况。这在 IIS 和 IIS Express 中都会发生。
我也试过添加一个默认路由,但看到了相同的行为。
我已经完成了一些阅读,我明白我可以在管道中编写某种钩子,或者编写一个带有 catch 所有路径的控制器和一个返回 404 的动作,但感觉好像不应该这样。
这是默认行为吗?
我看过这个答案,但我们没有 global.asax:ASP.NET Web Api 在返回 404 时返回 200 OK
请参阅下面的简化代码仍然可以证明此问题
Startup.cs
[assembly: OwinStartup(typeof(Startup))]
namespace Api.blah
{
using Owin;
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
var container = this.GetAutofacContainer(config);
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
private IContainer GetAutofacContainer(HttpConfiguration config)
{
ContainerBuilder containerBuilder = new ContainerBuilder();
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());
return containerBuilder.Build();
}
}
}
HealthController.cs
namespace Api.blah.Controller
{
[RoutePrefix("api/health")]
public class HealthController : ApiController
{
public HealthController()
{
}
[HttpGet]
[Route]
public HealthResponse Get()
{
return new HealthResponse { Alive = true, Healthy = true };
}
}
}
如果我访问 api/health 路径以外的任何东西(例如http://localhost:1333/zz),那么我得到 200.原始代码比这大,但我已经大大减少了它,如上所述,同样的行为仍然存在
1 回答
如果 web.config 包含 StaticFileModule,则会发生此问题
如果您需要静态文件,可以使用以下路径解决此问题: