我有一个使用 MVC 4 和 ServiceStack 的项目,它是 Azure 服务中的一个 Web 角色,托管在 IIS Express 中进行开发。我正在使用一个自定义身份验证提供程序,很像 CustomAuthenticationMvc 示例项目中的那个;它使用 Membership 类进行身份验证,并使用 Roles 类填充角色。我开始将该页面开发为一个直接的 HTML/CSS/JS 页面,对 ServiceStack 进行 API 调用,并在它返回 401 时使用弹出窗口进行身份验证,这过去只有在我停止并重新启动项目以重建服务时才会出现。在以这种形式进行开发时,我可以修改静态文件并重新加载页面并查看更改而不会中断身份验证会话,这一事实证明了经过身份验证的 API 调用在重新加载页面后将继续成功。
后来,一旦开发基本完成,我将 HTML 移动到 CSHTML 中,并使用一个控制器为其提供服务,添加表单身份验证,将 [Authorize] 添加到控制器,并将代码添加到 Account 控制器,以便当用户登录时,它还使用 ServiceStack 进行身份验证,再次使用 CustomAuthenticationMvc 中的代码作为指南。我还添加了表单重定向劫持预防,因此我可以继续检测未经身份验证的 API 调用。这一切都很好,除了这个:如果我修改一个静态文件(如 JS 文件)并重新加载返回 CSHTML 的控制器的路由,有时它重新加载就好了,但有时 CSHTML 会加载,但 API 调用会导致401s。这告诉我表单身份验证票证仍然有效,但不知何故 API 调用不再经过身份验证。
所以底线是,为什么在 MVC 项目中更改 JS 文件有时会导致 ServiceStack AuthSession 消失,我可以修复它吗?