应用程序要求Windows凭据与Web表单身份验证

本文关键字:Web 表单 身份验证 Windows 应用程序 | 更新日期: 2023-09-27 18:06:37

我的MVC . net应用程序发生了一个奇怪的问题。我正在使用Web表单身份验证,并且在我的Web .config中没有提到Windows身份验证。在我的本地计算机上,我可以去任何页面没有问题,但当我把它发布到我的登台环境时,它只要求一个控制器的Windows身份验证。这个控制器继承自我在所有其他页面上使用的相同的自定义控制器。

我认为这可能是IIS的文件夹权限问题,但我已经验证了网络服务对文件夹具有读取权限。

是否有任何可能导致Windows身份验证,而网站的其余部分正在使用Web表单?奇怪的是,它只发生在我的登台环境中,而不是我的本地机器中。

这是我的控制器代码:

public class ReportsController : WorkflowController
{
    public ActionResult Index()
    {
        return View();
    }
}

下面是来自WorkflowController类的一些代码:

[Authorize]
public abstract class WorkflowController : Controller
{
    /*  When a paramaterless WorkflowController is created this section will override it to 
        pass in a new UserManager*/
    public WorkflowController()
        : this(new UserManager<RediscoverUser>(
                    new UserStore<RediscoverUser>(
                        new UsersDbContext()))) { }
    public WorkflowController(UserManager<RediscoverUser> userManager)
    {
        UserManager = userManager;
        var currentUserId = System.Web.HttpContext.Current.User.Identity.GetUserId(); //get the id of the current user
        if (currentUserId != null)
        {
            AppUser = UserManager.FindById(currentUserId);
            new Task(() => LogActivity(AppUser)).Start(); //Asyncronously log the activity
            db.ChangeDatabase(initialCatalog: AppUser.DatabaseName); //set the db repository to the current users company
        }
    }
    //Set global variables for the workflow controller
    public UserManager<RediscoverUser> UserManager { get; private set; }
    public RediscoverUser AppUser { get; private set; }
    public RediscoverDatabaseEntities db = new RediscoverDatabaseEntities();
    public void LogActivity(RediscoverUser user)
    {
        user.DateOfLastActivity = DateTime.Now;
        UserManager.UpdateAsync(user);
    }
    //Override the default Dispose method to include the DatabaseEntities to be disposed of
    protected override void Dispose(bool disposing)
    {
        db.Dispose();
        base.Dispose(disposing);
    }
}

几乎我所有的控制器都继承了这个WorkflowController,他们都工作得很好。只有一个ReportsController给我带来了麻烦,它是最简单的。

我使用实体框架作为数据访问层。

在这个奇怪的问题上任何帮助将是伟大的!此外,任何关于这个自定义控制器类的一般建议都是受欢迎的:)

应用程序要求Windows凭据与Web表单身份验证

Erik Philips在评论中提出的问题是正确的。我将控制器重命名为RediscoverReportsController,现在一切都在工作。不确定为什么这会引起问题,也许它被保留在某个地方?

即使在更改控制器名称并重新发布更改后,如果我转到localhost/reports/index,它再次要求我进行Windows身份验证。我假设asp.net MVC有一些东西捆绑到名称报告?

谢谢你的帮助,伙计们,这让我发疯了!

编辑:另外,作为旁注,数据库所在的SQL Server实例安装了SSRS,因此它有一个"ReportServer"answers"ReportServerTempDB"数据库。我有一种感觉,我正在连接到localhost/reports/XXXXXX的设备,它试图连接到SSRS而不是我的web应用程序。多痛苦啊!