2
我已經創建了一個WebAPI Web應用程序,並且希望在POST和基於結果調用外部API時驗證數據。 除驗證結果外,數據將保存在數據庫中。 僅在調用外部API時纔會進行驗證。
我已經創建了發佈到外部API的邏輯,但我不太確定它將如何成爲驗證數據的最佳方式。C#/ MVC根據結果驗證模型數據並調用外部API
我的模型包含10個類,如下面的Class1,具有多個屬性,我爲它們中的每個創建了一個控制器。 屬性可以具有真/假值,但可以是字符串。對於POST
public class Class1
{
public ICollection<Class1Data> Data { get; set; }
}
public class Class1Data
{
public int Id { get; set; }
public string Prop1{ get; set; }
public string Prop2 { get; set; }
..
public string Prop10 { get; set; }
}
的WebAPI位指示:
[ResponseType(typeof(Class1))]
public async Task<IHttpActionResult> PostClass1(Class1 class1)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Class1.Add(class1);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = Class1.Id }, class1);
}
我已經不知何故管理來驗證一個屬性和POST外部API,但不能肯定我該怎麼做,我所有的模型類(我有大約10個,每個20個道具)。
var notValid = Class1.Data.Where(x => x.Prop1 == "False");
if (notValid != null)
{
foreach (var fault in notValid)
{
// Call external API using fault.Prop1/fault.Prop5/..
}
}
我怎麼能做到這一點? 我希望我的問題對你有任何意義。
我在想這個方法,但周圍有一些問題:如果一個屬性驗證測試失敗(即使我扔錯誤消息)數據控制器仍然會繼續向數據庫添加數據?我如何傳遞給Extenal API(在自定義驗證類中)屬性名稱(來自模型)和值。 – Alex
我已經成功驗證了我的模型在實現IValidatableObject接口的模型中,並且它實際上正在工作。感謝您的建議。現在唯一的問題是我試圖在Validate模型驗證方法中調用一個異步方法(用於調用Extenal API)。不太清楚我將如何解決這個問題,因爲我在其他帖子中看過同步<->異步可能會導致問題。 – Alex
@Alex很高興它的工作。到同步方法中調用異步可以使用這樣的方法:public static類AsyncHelper { \t公共靜態ŤRunSynchronously(Func鍵> asyncCall) \t { \t \t變種threadPoolTask =任務。運行(()=> \t \t { \t \t \t返回asyncCall(); \t \t}); \t \t return threadPoolTask.Result;然後你可以像這樣使用它:AsyncHelper.RunSynchronously(()=> CallYourAsyncMethodAsync()); –
Aram