我正在开发一个包含2个端点A和B的Web Api,我需要使用A的BasicAuthentication和B的自定义验证。我试图不在2个项目中拆分代码,为此我使用OWIN和2管:
app.Map("/api/A", basicAuth =>
{
basicAuth.UseBasicAuthentication(container);
});
app.Map("/api/B", idTokenAuth =>
{
idTokenAuth.UseBearerAuthentication(container);
});
我遇到的问题是,在身份验证之后,它不会重定向到相应的控制器并始终返回HTTP / 1.1 404 Not Found。
任何提示?
答案 0 :(得分:1)
我假设你有app.UseWebApi?在这里使用Map的麻烦在于,当它完成时它不会重新加入父管道(尽管它会落到IIS / MVC中)。这是一个类比......
你想要的是:
if (path.startswith("/api/a"))
{
DoBasicAuth(optionsA);
}
if (path.startswith("/api/b"))
{
DoBasicAuth(optionsB);
}
DoWebApi();
但Map实际上做的是:
if (path.startswith("/api/a"))
{
DoBasicAuth(optionsA);
return;
}
if (path.startswith("/api/b"))
{
DoBasicAuth(optionsB);
return;
}
DoWebApi();
我们已经提出了您可以遵循的不同UseWhen模式,但您必须复制源并将其移植到后端: https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http.Abstractions/Extensions/UseWhenExtensions.cs