2016-04-12 18 views
1

私はさまざまなリソースを使用して、AngularJSアプリケーションのMS Accessを使用してIDシステムを実装しています。 私は必要なIDインターフェイスを実装するクラスを作成しましたが、アカウントコントローラ(登録、ログインなどのためのAPIになります)を作成する段階に固執しています。ASP.NET IDのカスタム実装

クラスUserStoreIUserStoreを実装しCreateAsync方法があります

public Task CreateAsync(TUser user) 
{ 
    if (user == null) 
    { 
     throw new ArgumentNullException("user"); 
    } 

    var result = userTable.Insert(user); 

    return Task.FromResult(result); 
} 

AccountControllerApiControllerを実装するとRegister方法があります

[AllowAnonymous] 
[Route("register")] 
public async Task<IHttpActionResult> Register(IdentityUser user) 
{ 
    var result = await _userStore.CreateAsync(user); 

    if (result == 0) 
    { 
     return InternalServerError(); 
    } 

    return Ok(); 
} 

userTable.Insert(user)がで影響を受けた行の数を示すintを返すをDBテーブル。行var result = await _userStore.CreateAsync(user);は、実際にはvoidを返し、voidvar(または他のもの)に割り当てることはできないとエラーを返します。

RegisterメソッドとCreateAsyncメソッドを一緒に使用する方法を理解するのは苦労しています。

はところで、私は全体async事をあきらめ、ちょうどCreateAsyncを作り、Register-あるとしてint型の値を返しますが、UserStoreは、 `IUserStore「を実装しているので、私はそれを行うことはできないはずです思いました。

+1

は例があります[この質問](http://stackoverflow.com/questions/32927571/iuserstoretuser-createasync-how-to-specified-failure-in-custom-implementation)これは役に立ちます – stuartd

答えて

1

CreateAsyncから戻り値の型を渡すことはできません。単純にTaskが返されるからです。 Task<int>にする必要がありますが、IUserStoreインターフェイスを実装しているので、これを行うことはできません。なぜあなたは結果が必要なのですか、私はあなたがしていないと仮定していますか?

は、代わりにこれを試してみてください:

[AllowAnonymous] 
[Route("register")] 
public async Task<IHttpActionResult> Register(IdentityUser user) 
{ 
    await _userStore.CreateAsync(user); 
    return Ok(); 
} 

さらに、すべての可能であればuserTable.Insert(user)async呼び出しを行うことを検討してください。

私はasync/awaitをあきらめないことをお勧めします。このようなWebサイトでのI/Oバウンド操作では、アプリケーションを実際に使用できるようにします。

あなたは、インサートが問題であるかもしれないかどうかについては本当に心配している場合は、代わりにこれを試してみてください。

public async Task CreateAsync(TUser user) 
{ 
    if (user == null) 
    { 
     throw new ArgumentNullException("user"); 
    } 

    var existingUser = await this.FindByIdAsync(user.Id); 
    if (existingUser != null) 
    { 
     await this.UpdateAsync(user); 
    } 
    else 
    { 
     userTable.Insert(user); 
    } 
} 
+0

この質問で私を助けてください:http://stackoverflow.com/questions/39275597/how-to-give- asp-net-identity –

+0

のカスタムインプリメント実装方法@ ASP.NET **をターゲットとしていて、** ASP.NET Core **をターゲットにしていない場合、私はそれに精通していません...私は巨大な** ASP.NET Core **プロジェクトに取り組んできました。したがって、私はより速くt彼の枠組みは話す。 –

+0

はい私はasp.netコアをターゲットとしています。この回答は、あなたがMicrosoft asp.net identity.canについてよく理解していることを示しています。パスワードをデータベーステーブルのMicrosoft IDでハッシュする方法を教えてください。 –

関連する問題