【发布时间】: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