我已经阅读了关于这个主题的一些SO问题,但似乎所有人都在处理你应该把这个电话放在哪里。
我的问题有所不同:我已经完成了WebSecurity.InitializeDatabaseConnection()
调用,并设置了断点,所以我知道它已被执行。但我仍然得到invalid operation exception
说我必须称之为。
与MVC控制器操作中包含它的大多数其他问题不同,我遇到了HttpModule
我编写的用于完成REST WebAPI控制器的身份验证的问题。 Init调用包含WebSecurity.InitializeDatabaseConnection
调用。然后OnAuthenticationRequest
方法从请求的Authorization标头中提取用户名和密码信息,并调用ValidateUser
的{{1}}方法。这是我得到异常的地方
您必须调用
SimpleMembershipProvider
方法 在调用WebSecurity.InitializeDatabaseConnection
类的任何其他方法之前。
所以
a)为什么在我已经满足不满足条件的情况下,我会收到此异常 b)可以做些什么呢?
答案 0 :(得分:1)
面对同样的问题并设置了许多断点后,我找到了适合我环境的解决方案,我希望其他人可以从中受益:
在文件夹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个观点:
我总是遇到以下情况中的问题:
此时尚未调用类InitializeSimpleMembershipAttribute中的方法“OnActionExecuting”(通过设置断点确定)!
但是当我打开一个不需要授权的View(即/ Account / Register)时,调用了方法“OnActionExecuting”。在此之后我可以毫无错误地调用/ Task。
因此解决方案是在应用程序启动时为“OnActionExecuting”创建一个“伪调用”。
答案 1 :(得分:0)
每次调用HttpModule时都不需要初始化数据库连接。只需在应用程序启动时执行一次。这是一个article that explains how to use SimpleMembership for authentication/authorization of Web API calls。还有一个示例项目源代码的链接。