混合ASP.NET WebForms和MVC授权

时间:2012-05-22 14:07:01

标签: asp.net asp.net-mvc asp.net-mvc-3 authorization webforms

我正在尝试将一些MVC3功能混合到现有的WebForms应用程序中。我遵循了几个指南,除了授权部分外,所有设置和工作都已完成。现有应用程序的<deny users="*" />位于根web.config,每个子文件夹都有自己的web.config,允许访问特定角色的页面。

我的新理解是这种风格不能/不应该在控制器上使用,我应该使用Authorize属性。我已经使用HomeController修改了我的测试“[Authorize(Roles="AdminRole")]”类,但是当我尝试查看该页面时,我收到了“拒绝访问”页面。

如果我将root web.config更改为<allow users="*" />,则页面有效。这是否意味着我添加到控制器的属性正在运行,但root web.config设置优先于它?我不想搞乱我们现有的授权内容,因为该网站已经建立完善,而我只是想尝试添加MVC。我错过了什么吗?感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:1)

啊,当您尝试在已经使用Web窗体的应用程序中使用MVC安全性时,这有点棘手。如果这是纯粹的mvc,那么选择很简单。如果你不能将mvc功能拉出到一个单独的应用程序中,那么这会让你感到有些困惑。

我的第一个建议是尝试提取代码。如果您使用MVC仅提供restful功能,也可以查看MVC4 web api为您的应用程序提供api并共享它们之间使用的组件,这需要将它们从您的Web应用程序中拉出到域库或其他一些适当的命名库。

话虽如此,但不是100%确定allow users =“*”是否按预期工作,但我相信它是。它很容易测试,只需将Roles =“AdminRole”更改为Roles =“placeholder”,然后重试。

设置这个虽然杀死了你的auth的其余部分,所以一个想法可能是将所有mvc路由放在特定的URL下,例如“/ api /”和web.config中的allow *到该路径,然后使用mvc的安全性在你的所有控制器方法上。这对您的主要网络应用程序影响很小。