5 c# asp.net ntlm http-status-code-401 signalr
我有一个带有 MVC、Web API 和 SignalR 并使用 Windows 身份验证的 .Net 4.5 网站。一切运行良好,直到我将集线器添加到我的 HTML 中:
@Scripts.Render("~/signalr/hubs")
Run Code Online (Sandbox Code Playgroud)
有了这条线,大约有 1/3 的时间,当我按 F5 刷新页面时,在页面加载之前,我会收到用户名/密码提示。这有时只影响集线器,有时会影响一些 MVC 视图,有时会影响整个页面。我有这个Startup.cs:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(NtlmAuthenticationDefaults.AuthenticationType);
app.UseNtlmAuthentication();
app.MapSignalR(new HubConfiguration()
{
EnableDetailedErrors = true,
EnableJSONP = true
});
}
}
Run Code Online (Sandbox Code Playgroud)
在web.config:
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
我注意到在 Fiddler 中请求 hubs.js 有一个Authorization: Negotiate ...标头。紧随其后的是第二个请求,也是针对 hub.js,使用Authorization: Negotiate ...,但哈希值不同。
有谁知道为什么会发生这种情况以及如何解决它?可根据要求提供其他诊断信息。请注意,我实际上并没有连接到 SignalR 集线器。此时我正在做的就是加载集线器 JS。
这似乎只发生在 Chrome 上。到目前为止,IE 一直运行良好。
编辑:当我关闭 Fiddler 时,问题完全消失。 那么现在问题变成了:为什么MVC、SignalR和Fiddler的组合会破坏Ntlm?如果我卸下集线器,它就可以工作。如果我关闭 Fiddler,它会起作用。什么?