Asp.net core 在ASP.Net Core RC2中正确返回401未授权错误的代码现在错误地返回500错误

Asp.net core 在ASP.Net Core RC2中正确返回401未授权错误的代码现在错误地返回500错误,asp.net-core,Asp.net Core,我们有一个ASP.Net核心web服务,使用Azure AD B2C进行承载令牌身份验证。我们的iOS客户端发出API请求,如果ASP.Net核心服务器返回401未经授权的错误,正文中带有术语“SecurityTokenExpiredException”,则客户端刷新其令牌并重试 这在ASP.Net Core RC2下非常有效,但现在我们已经迁移到发行版,我们无法在不中断客户端的情况下部署服务器,因为服务器不再正确地返回401未授权错误,而是返回500错误 设置401的代码位于Startup.c

我们有一个ASP.Net核心web服务,使用Azure AD B2C进行承载令牌身份验证。我们的iOS客户端发出API请求,如果ASP.Net核心服务器返回401未经授权的错误,正文中带有术语“SecurityTokenExpiredException”,则客户端刷新其令牌并重试

这在ASP.Net Core RC2下非常有效,但现在我们已经迁移到发行版,我们无法在不中断客户端的情况下部署服务器,因为服务器不再正确地返回401未授权错误,而是返回500错误

设置401的代码位于Startup.cs中

public void配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
应用程序使用(异步(上下文,下一步)=>
{
尝试
{
等待下一个();
}
捕获(例外情况除外)
{
if(context.Response.HasStarted)
{
投掷;
}
int statusCode=500;
如果(ex)是SecurityTokenInvalidSignatureException||
ex是SecurityTokenInvalidLifetimeException||
ex是SecurityTokenExpiredException)
{
statusCode=401;
}
else if(ex是ResourceNotAuthorizedException)
{
statusCode=403;
}
else if(ex为ResourceNotFoundException | | ex为UserDoesNotExistException)
{
statusCode=404;
}
context.Response.StatusCode=状态码;
wait context.Response.WriteAsync(新的异常响应(statusCode,ex.ToString());
}
});
//[...]
(注意:如果我在调试器中单步执行此代码,则每行执行一次,局部变量
statusCode
将正确设置为401,并且最后两行将运行,但ASP.Net Core发送回客户端的错误是500,而不是401。)


从RC2到ASP.Net核心版本是否发生了一些变化,从而导致此代码不正确?编写此代码的新方法是什么?

也作为GitHub问题交叉发布。我希望这是好的。我已经创建了一个要点,显示写入
context.Response.WriteAsync
的文本与接收到的响应文本之间的显著差异要点是,当您尝试设置状态代码时,响应是否可能已经开始?可能,但RC2中不是这样。如果是这样,我应该将此代码放置在何处?