加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 你必须调用“WebSecurity.InitializeDatabaseC

发布时间:2020-12-16 09:38:52 所属栏目:asp.Net 来源:网络整理
导读:我已经阅读了关于这个主题的一些SO问题,但似乎都在处理你应该把这个电话放在哪里. 我的问题是不同的:我已经完成了WebSecurity.InitializeDatabaseConnection()调用,并设置了断点,所以我知道它已被执行.但我仍然得到无效操作异常,说我必须调用它. 与MVC控制
我已经阅读了关于这个主题的一些SO问题,但似乎都在处理你应该把这个电话放在哪里.

我的问题是不同的:我已经完成了WebSecurity.InitializeDatabaseConnection()调用,并设置了断点,所以我知道它已被执行.但我仍然得到无效操作异常,说我必须调用它.

与MVC控制器操作中包含它的大多数其他问题不同,我遇到了一个HttpModule,我编写了HttpModule来完成REST WebAPI控制器的身份验证. Init调用包含WebSecurity.InitializeDatabaseConnection调用.然后,OnAuthenticationRequest方法从请求的Authorization标头中提取用户名和密码信息,并调用SimpleMembershipProvider的ValidateUser方法.这是我得到例外的地方

You must call the WebSecurity.InitializeDatabaseConnection method
before you call any other method of theWebSecurityclass.

所以

a)当我已经达到了不能得到它的条件时,为什么我会得到这个例外.
???b)可以做些什么呢?

解决方法

经过几个小时面对同样的问题并设置了许多断点后,我找到了适合我环境的解决方案,我希望其他人可以从中受益:

在文件夹App_Start中

public class FilterConfig
{
  public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
    var attr=new InitializeSimpleMembershipAttribute();
    // here is the important part
    attr.OnActionExecuting(new ActionExecutingContext());
    filters.Add(attr);
  }
}

背景:在我的应用程序中,我有2个视图:

> /帐户/注册:这是标准asp.mvc 4模板的一部分,并具有[AllowAnonymous]属性
> / Task:这是todo-list的“Index”-View,TaskController的属性为[Authorize(Roles =“Administrator”)]

我总是在以下的引文中遇到问题:

>在浏览器中调试会话
>成功登录
>打开需要授权的视图“/ Task”
>切换到visual studio并保持浏览器打开
>停止调试
>更改控制器内的一些代码(设置一些空格就足够了)
>开始调试会话
>在浏览器中按刷新

此时,尚未调用类InitializeSimpleMembershipAttribute中的方法“OnActionExecuting”(通过设置断点确定)!

但是当我打开一个不需要授权的View(即/ Account / Register)时,调用了方法“OnActionExecuting”.在此之后,我可以无错误地调用/ Task.

所以解决方案是在应用程序启动时为“OnActionExecuting”创建一个“伪调用”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读