1

私は.netコアのWeb APIを使用しています。の後にモデルを追加/追加する(つまり、現在ログインしているユーザーのユーザー名を追加した後に)モデルを検証/再検証しようとしています。更新モデルを追加した後にモデルを検証します

だが、これは私のコントローラのアクション

[Authorize] 
[HttpPost] 
public void Update([FromBody]UpdateUser User) 

そして、ここで私は私の認証スキームのために使用されるコードであるとしましょう:

string token = Context.Request.Query["token"]; 
if (token == null) return AuthenticateResult.Fail("No JWT token provided"); 
try 
{ 
    var principal = LoginControl.Validate(token); 
    return AuthenticateResult.Success(new AuthenticationTicket(principal, SchemeName)); 
} 
catch (Exception) 
{ 
    return AuthenticateResult.Fail("Failed to validate token"); 
} 

基本的に私は、このフローを達成しようとしています: POSTリクエストを - > Authorize->ユーザーIDをモデルに追加 - >モデルを検証します。

承認後、最初にUser.UserName = CurrentUserNameを追加する必要があり、モデルのみを検証する必要があります。その後、新しく更新されたモデルでModelStateオブジェクトを使用できます。両方のインスタンスで今

[HttpPost] 
public async Task Update([FromBody]UpdateUser User) 
{ 
    User.UserName = "hello"; 
    bool valid = await TryUpdateModelAsync(User); 
    valid = TryValidateModel(User); 
} 

valid偽であるとModelStateUserNameが必要であることを示しています。今、私は次のことをしようとしていますのよう 。私がUpdateUserで追加した唯一の妥当性確認は、モデルに[Required]を追加することです。

+0

解決策が見つかりましたが、この機能をフィルタにするというアイディアがあれば教えてください –

答えて

0

TryValidateModelを呼び出す前に、モデルを消去して動作させました。

[HttpPost] 
public async Task Update(UpdateUser User) 
{ 
    User.UserName = "hello"; 
    ModelState.Clear(); 
    TryValidateModel(User); 
    // ModelState is now reset 
} 
関連する問題