我有一个相对简单的WebApi站点,带有几个控制器,在OWIN中运行,AutoFac作为DI容器。
网站仅使用属性路由设置,但即使我们点击无效路线,也始终返回200 OK响应。我们还运行了一些过滤器和静态文件服务器,但我已经注释掉了启动文件中的所有代码(所有IAppBuilder调用甚至是HttpConfiguration的创建),但我们仍然会遇到这种情况。这在IIS和IIS Express中都会发生。
我也尝试添加默认路由,但看到了相同的行为。
我已经完成了一些阅读,我明白我可以在管道中编写某种钩子,或者编写一个带有catch所有路径的控制器和一个返回404的动作,但感觉好像不应该必要。
这是否是默认行为?
我看过这个答案,但我们没有global.asax:ASP.NET Web Api returns 200 OK when it should return 404
请参阅下面的简化代码,该代码仍然显示问题
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。 原始代码比这个大,但是我已经大大减少了它,正如我上面解释的那样,同样的行为仍然存在
答案 0 :(得分:0)
如果您的web.config包含StaticFileModule
,则可能会发生此问题<handlers>
<!-- Remove all handlers -->
<clear />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Unspecified" requireAccess="Read" />
</handlers>
如果您需要静态文件,可以使用以下路径解决此问题:
<add name="StaticFile" path="/staticfiles" verb="*" modules="StaticFileModule" resourceType="Unspecified" requireAccess="Read" />