【问题标题】:App is asking for Windows credentials with Web Forms autentication应用程序要求使用 Web 窗体身份验证的 Windows 凭据
【发布时间】:2014-06-03 20:43:26
【问题描述】:

我的 MVC .NET 应用程序出现了一个奇怪的问题。我正在使用 Web 窗体身份验证,并且在我的 web.config 中没有对 Windows 身份验证的引用。在我的本地计算机上,我可以毫无问题地访问任何页面,但是当我将其发布到我的登台环境时,它只要求对一个控制器进行 Windows 身份验证。此控制器继承自我在所有其他页面上使用的同一个自定义控制器。

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

当站点的其余部分使用 Web 窗体时,是否有任何可能导致 Windows 身份验证的内容?奇怪的是它只发生在我的暂存环境中,而不是我的本地机器。

这是我的控制器代码:

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,它是最简单的。

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

在这个奇怪的问题上的任何帮助都会很棒!此外,任何关于这个自定义 Controller 类的一般建议都将受到欢迎:)

【问题讨论】:

  • 您的应用程序根目录中是否有一个名为 Reports 的目录?
  • @ErikPhilips,不,先生。只是根目录下的常用 MVC 文件夹(bin、内容、字体、图像、脚本、视图)。在 Views 文件夹中,我有带有 index.cshtml 的报告文件夹。
  • 你检查过数据库的连接字符串吗?
  • @ActiveHigh,是的,我检查了所有项目中的所有连接字符串。在 Web 应用程序的 IIS 连接字符串中,“LocalSqlServer”连接名称有“Integrated Security=SSPI”,但我没有在我的应用程序的任何地方使用它。

标签: c# asp.net-mvc entity-framework authentication controller


【解决方案1】:

Erik Philips 在 cmets 中的问题是正确的。我将控制器重命名为 RediscoverReportsController,现在一切正常。不知道为什么这会导致问题,也许它被保留在某个地方?

即使在更改控制器名称并重新发布更改后,如果我转到 localhost/reports/index,它也会再次要求我进行 Windows 身份验证。我假设 asp.net MVC 与名称 Reports 相关联?

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

编辑:另外,作为旁注,数据库所在的 SQL Server 实例安装了 SSRS,因此它上面有一个“ReportServer”和“ReportServerTempDB”数据库。我有一种感觉,我正在连接到 localhost/reports/XXXXXX 的等价物,它试图连接到 SSRS 而不是我的 Web 应用程序。多么痛苦!

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 2013-04-09
    • 1970-01-01
    • 2013-02-19
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多