我想創建一個用于插入Amount Date note Account_Nametable的小應用程式transaction。
我不想為此創建一個操作方法,而是想從 CLI 中使用。
我的業務物件如下所示:
public class ExpenseBO : Controller
{
public void MakeExpense(MakeExpensePayload payload)
{
var transactionAccess = new TransactionAccessController(connection);
transactionAccess.MakeTransaction(payload);
}
}
在接入層:
public void MakeTransaction(MakeExpensePayload p)
{
connection.Insert(new { p.Amount, p.Date, p.Note });
}
模型 MakeExpensePayload:
public class MakeExpensePayload
{
public int Amount { get; set; }
public string note { get; set; }
public DateTime Date { get; set; }
}
我想驗證Amount, Date, note, AccountName- 例如,Amount不能為負數,note不應該為空(即,使note欄位成為必填項)。Date不強制提供
由于我在這里沒有使用操作方法,因此無法使用模型驗證和資料注釋進行驗證。
那么,我應該在所有這些結構中在哪里添加驗證以及如何驗證這些?
uj5u.com熱心網友回復:
如果您想要服務器端驗證,我認為您可以單獨進行。例如:
您可以創建一個私有方法,您可以在其中進行驗證并向客戶端拋出例外以通知該欄位是必需的:
private void GeneralValidations(MakeExpensePayload payload)
{
if(payload.Amount <= 0)
//Throw new HttpException
if(string.IsNullorEmpty(payload.Note))
//Throw new HttpException
}
然后,將其呼叫到您的方法中:
public void MakeExpense(MakeExpensePayload payload)
{
GeneralValidations(payload);
var transactionAccess = new TransactionAccessController(connection);
transactionAccess.MakeTransaction(payload);
}
uj5u.com熱心網友回復:
經驗法則是您應該驗證您的資料一旦您收到它并開始處理它,這將有助于消除任何可能的威脅
客戶端驗證是不夠的,因為它可以被繞過,你也應該在服務器端進行驗證
uj5u.com熱心網友回復:
validation conditions您可以在創建模型時添加添加,并用于ModelState.IsValid在服務中一次驗證所有模型。
模型
public class MakeExpensePayload
{
[Range(0, int.MaxValue)]
[Required(ErrorMessage = "Amount cannot be negative")]
public int Amount { get; set; }
[Required]
public string note { get; set; }
public DateTime? Date { get; set; }
}
服務
private void GeneralValidations(MakeExpensePayload payload)
{
if (ModelState.IsValid)
{
//do your logic
}
return View(model);
}
然后你可以看到如果模型驗證中的任何屬性失敗,ModelState.IsValid將回傳 false。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425386.html
標籤:C# 验证 asp.net-core-mvc 数据访问层
上一篇:過濾器轉換-空條件
下一篇:MySQL檢查一組屬性的唯一性?
