我有一个控制器。
public sealed class AccountsController : BaseApiController
{
private readonly IDatabaseAdapter _databaseAdapter;
public AccountsController(IDatabaseAdapter databaseAdapter)
{
_databaseAdapter = databaseAdapter;
}
[AllowAnonymous]
[Route("create")]
public async Task<IHttpActionResult> CreateUser(CreateUserBindingModel createUserModel)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
if (! await _databaseAdapter.DoesAgentExist(createUserModel.UserName))
return BadRequest();
if (await _databaseAdapter.DoesAgentHaveAccount(createUserModel.UserName))
return BadRequest();
// Create account.
var password = PasswordHelper.GeneratePassword(32);
createUserModel.Password = password;
createUserModel.ConfirmPassword = password;
var user = new ApplicationUser
{
UserName = createUserModel.UserName,
};
var addUserResult = await AppUserManager.CreateAsync(user, createUserModel.Password);
if (!addUserResult.Succeeded)
return GetErrorResult(addUserResult);
var locationHeader = new Uri(Url.Link("GetUserById", new { id = user.Id }));
return Created(locationHeader, ModelFactory.Create(user));
}
}
http://localhost:59430/api/accounts/create
用户代理:Fiddler
内容类型:应用程序/json接受:应用程序/json主机:
本地主机:59430内容长度:106
{“UserName”:“a.xxxxx”,“Password”:“xxxxxx”,
具体到以下几行:
var addUserResult = await AppUserManager.CreateAsync(user, createUserModel.Password);
然后出现以下异常
{“message”:“发生错误。”,“exceptionMessage”:“方法
未找到:'系统。网Http。HttpRequestMessage
系统网状物Http。ApiController。get_Request()'。“,”exceptionType“:
“System.MissingMethodException”,“stackTrace”:“at”
WebAuth。控制器。BaseApicController。get\u AppUserManager()\r\n位于
WebAuth。控制器。会计控制人。d__3。MoveNext()输入
C: \用户\艺术\文档\ Visual Studio
2017\Projects\WebAuth\WebAuth\Controllers\accountscocontroller。cs:线路
76\r\n---exception所在的上一个位置的堆栈结束跟踪
被抛出---\r\n
系统运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务
任务\r\n位于
系统运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务
系统穿线。任务。TaskHelpersExtensions。d_3'1。MoveNext()\r\n---
来自引发异常的前一个位置的堆栈结束跟踪
---\在系统上。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务
任务\r\n位于
系统运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务
系统网状物Http。控制器。ApiControllerActionInvoker。d__0。MoveNext()\r\n---
---\在系统上。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务
系统运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务
任务\r\n位于
系统网状物Http。控制器。ActionFilterResult。d__2。MoveNext()\r\n---
---\在系统上。运行时。编译器服务。任务等待者。ThrowForNonSuccess(任务
任务\r\n位于
系统运行时。编译器服务。任务等待者。HandleNonSuccessAndDebuggerNotification(任务
任务\r\n位于
系统网状物Http。调度员。HttpControllerDispatcher。d__1。MoveNext()“
}
有人知道发生了什么吗?我不知道为什么它找不到那种方法。
我的垃圾箱文件夹包含
系统网状物Http。dll
系统网Http。dll
ApplicationUserManager
public sealed class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options,
IOwinContext context)
{
var appDbContext = context.Get<ApplicationDbContext>();
var appUserManager = new ApplicationUserManager(new UserStore<ApplicationUser>(appDbContext));
appUserManager.UserValidator = new UserValidator<ApplicationUser>(appUserManager)
{
AllowOnlyAlphanumericUserNames = true,
RequireUniqueEmail = false,
};
appUserManager.PasswordValidator = new PasswordValidator
{
RequiredLength = 12,
RequireNonLetterOrDigit = true,
RequireUppercase = true,
RequireLowercase = true,
RequireDigit = true
};
appUserManager.MaxFailedAccessAttemptsBeforeLockout = 3;
appUserManager.DefaultAccountLockoutTimeSpan = TimeSpan.FromHours(1);
return appUserManager;
}
}
BaseApicController
public class BaseApiController : ApiController
{
private ModelFactory _modelFactory;
private readonly ApplicationUserManager _applicationUserManager = null;
protected ApplicationUserManager AppUserManager => _applicationUserManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
protected ModelFactory ModelFactory => _modelFactory ?? (_modelFactory = new ModelFactory(Request, AppUserManager));
protected IHttpActionResult GetErrorResult(IdentityResult result)
{
if (result == null)
return InternalServerError();
if (result.Succeeded) return null;
if (result.Errors != null)
foreach (var error in result.Errors)
ModelState.AddModelError(string.Empty, error);
if (ModelState.IsValid)
return BadRequest();
return BadRequest(ModelState);
}
private readonly ApplicationRoleManager _appRoleManager = null;
protected ApplicationRoleManager AppRoleManager => _appRoleManager ?? Request.GetOwinContext().GetUserManager<ApplicationRoleManager>();
}