【问题标题】:Using the [Authorize] keyword is ASP.NET MVC controller stops Script code from running使用 [Authorize] 关键字是 ASP.NET MVC 控制器停止运行脚本代码
【发布时间】:2015-09-22 21:35:55
【问题描述】:

我的 ASP.NET MVC 中脚本标记中包含的 JavaScript 可以完美运行,但是,如果我在控制器中添加 Authorize 关键字,则 JavaScript 不会运行。不幸的是,我没有在网上找到任何关于这个问题的参考资料。

这是我的控制器:

namespace PROJECT.Controllers
{
   [Authorize]
   public class HomeController : Controller
{

如果我在特定控制器方法上添加 Authorize 关键字,而不是像上面那样普遍使用,也会出现同样的问题。我不确定如何使用 Authorize 密钥或替代方法来启用 JavaScript。

任何帮助将不胜感激。

【问题讨论】:

  • 还有更多的东西。脚本标签内的脚本可能会引用其他脚本或其他东西。一旦脚本进入浏览器,它并不关心托管它的页面是否需要下载 cookie。
  • 在深入研究之后,我意识到问题出在用户登录时。当没有用户登录时,(并且 Authorize 标签被注释掉)JavaScript 运行。当用户登录时,JavaScript 不会运行,但不会出现控制台错误。
  • 我冒昧地猜测在您的一个视图(或部分视图)中存在JavaScript 的片段,这是整个页面上的JavaScript 运行所必需的。页面上只需要一个JavaScript 语法错误即可禁用它,并且您的一个视图可能包含缺失的片段以使其在语法上正确。从HomeController 中删除[Authorize] 属性并将其放在每个操作方法上,直到找到导致问题的方法,然后检查其对应的视图代码。

标签: javascript asp.net asp.net-mvc authorization authorize


【解决方案1】:

当您使用AuthorizeAttribute 标记操作方法时,对该操作方法的访问仅限于经过身份验证和授权的用户。如果您使用该属性标记控制器,则控制器中的所有操作方法都会受到限制。在标有AuthorizeAttribute 属性的控制器中,您可以使用AllowAnonymousAttribute 属性来指定特定操作方法不仅限于授权用户。

Authorize 属性允许您指示授权仅限于预定义角色或单个用户。您使用RolesUsers 属性来指定允许哪些角色或用户访问操作方法。这使您可以高度控制谁有权查看网站上的任何页面。 如果未经授权的用户尝试访问标有Authorize 属性的方法,MVC 框架将返回401 HTTP 状态代码。如果站点配置为使用 ASP.NET 表单身份验证,401 状态代码会导致浏览器将用户重定向到登录页面。

MSDN Source.

【讨论】:

  • 我理解这个概念。当用户通过身份验证后登录时,可以查看该站点的页面并处于活动状态。我的问题是标签似乎阻止了这些页面上的 JavaScript,即使在身份验证之后也是如此。 JavaScript 在 Authorize 关键字被注释掉时执行。
  • 你能发布一些javascript示例吗?
猜你喜欢
  • 2022-01-20
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多