MVC4 で Validation 属性を書き込もうとしています。目的は、アプリケーション参照 (重複を防止したいキーを表す単なる文字列) の存在を確認することです。私のデータは WebAPI 経由でアクセスされます。私は 4.5 を使用しているため、可能であればこれを非同期にしたいと考えています。
私はおそらく async と await を最適または適切に使用していませんが、継承された Validation クラスのオーバーライドされた IsValid メソッドから非同期メソッドを呼び出す方法を知りたいです。
public class UniqueApplicationReferenceAttribute : ValidationAttribute
{
public UniqueApplicationReferenceAttribute() : base(() => "The {0} already exists") { }
public int? ApplicationCount { get; set; }
public override bool IsValid(object value)
{
var myTask = GetApplicationRefCountAsync();
myTask.Wait();
this.ApplicationCount = this.ApplicationCount ?? 0;
if (ApplicationCount > 0)
{
return true;
}
else
{
return false;
}
}
public async Task GetApplicationRefCountAsync()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:11111/");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var apps = client.GetStringAsync("api/dataapplications");
await Task.WhenAll(apps);
var appList = apps.Result;
this.ApplicationCount = appList.Count();// apps.Count();
}
}
どうもありがとう、ダン。