【发布时间】:2014-01-02 04:47:38
【问题描述】:
我有管理用户帐户的 WebApi 控制器。控制器有 3 种方法: 构造函数 - 获取类型为 UserManager<IdentityUser> 的参数,该参数由 ninject 自动注入。
Dispose - 处理 UserManager。
Register Action - 注册新用户。
我在Register 动作和Dispose 方法中设置了断点。
注意:Register 操作使用 ajax 调用。
NinjectWebCommon.cs
kernel.Bind<UserManager<IdentityUser>>().ToConstant(Startup.UserManager);
AccountController.cs
private readonly UserManager<IdentityUser> _userManager;
public AccountController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
[Route("api/Account/Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{ // **<---- Breakpoint**
// code...
}
protected override void Dispose(bool disposing)
{ // **<---- Breakpoint**
if (disposing)
{
_userManager.Dispose();
}
base.Dispose(disposing);
}
在我按下 F5(开始调试)后,Dispose 方法中的断点首先命中。然后我填写表单并将请求发送到Register 操作,其中的断点命中。
问题是UserManager 在操作发生之前被释放,我如何修复代码以便 UserManager 在应用程序停止后释放?
【问题讨论】:
-
您是否在进行跨域 AJAX 请求?
-
@DarinDimitrov 在“跨域”中 - 您的意思是从域 X.com 到 Y.com?如果是,则否,请求是从 X.com 到 X.com/api/Account/Register。
-
也许您的控制器操作因其名称而未被调用,而您只是得到 404?
Register不是 RESTful 控制器操作的标准名称。在 ASP.NET Web API 中,标准方法是使用 HTTP 动词之类的操作名称:Get、Post、Put……您确定您有正确的路由设置并且您正在发出正确的 HTTP 请求吗? -
@DarinDimitrov 我忘了注意我在
Register操作上设置了RouteAttribute:[Route("api/Account/Register")]。Register动作处理,但在调用 first.called 的Dispose方法中配置的UserManager对象之后。 -
你有没有感觉到人们对这个 ioc/injection/testing 的东西有点过分了?
标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api