OWA中的WebApi在不匹配路由时总是返回200而不是404
问题描述:
我有一个相对简单的WebApi站点,有几个控制器,在OWIN中以AutoFac作为DI容器运行。OWA中的WebApi在不匹配路由时总是返回200而不是404
该网站仅使用属性路由设置,但始终返回200 OK响应,即使我们遇到无效路由。我们有一些过滤器和一个静态文件服务器也在运行,但我已经注释了我们的启动文件中的所有代码(所有的IAppBuilder调用,甚至创建了HttpConfiguration),但我们仍然得到这种行为。这发生在IIS和IIS Express中。
我也尝试添加一个默认路由,但看到了相同的行为。
我已经做了一些阅读,并且我明白我可以在管道中编写某种钩子,或者编写一个控制器来捕获所有的路由和一个返回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 };
}
}
}
如果我访问其他任何东西n中的API /保健途径(例如http://localhost:1333/zz)然后我得到了200元。 原来的代码比这个更大的,但正如我上面所解释的,我显著降低它和相同的行为仍然存在
答
这个问题可以发生,如果你的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" />
不,这不是默认的行为。如果您需要任何帮助,您需要发布一些代码。 – Hypnobrew
@Merryweather完成 – ChrisFletcher
只是为了完整性:请添加您的路线配置 – Marco