請教在寫webapi時
我使用了兩種方式接收,第一種是用如下先做空值與沒有此欄位驗證,但此種驗證無法驗證其它的而且與類別裏若某屬性欄上有設定驗證 [RegularExpression(@"^([0-9]{6})$")] 是不會有做用,要改用類別接收方式如第2種
HttpRequest _request = HttpContext.Current.Request;
然後各別用
if (string.IsNullOrWhiteSpace(_request.Form.Get("XXX")))
{
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, _request.Form.Get("XXX") == null ? "必須有XXX欄位" : "XXX參數格式錯誤"));
}
第2種QueryX是類別,裏面欄位若有設定驗證, 在送入資料給類別時if(ModelState.IsValid)就會驗證,但若第一種_request.Form.Get有什麼方法能像第二種一樣能驗證到自定規則
public IHttpActionResult Get(QueryX query)
{
if (ModelState.IsValid)
{
你直接在Models裡的Class驗證就好啦
public class Member
{
[Required]
[Display(Name = "會員編號")]
[StringLength(20, ErrorMessage = "{0}的長度至少必須為{2}的字元。", MinimumLength = 1)]
public string MemberID { get; set; }
[Display(Name = "會員姓名")]
[StringLength(40, ErrorMessage = "{0}的長度至少必須為{2}的字元。", MinimumLength = 1)]
public string MemberName { get; set; }
[Display(Name = "會員手機")]
[RegularExpression(@"^(09)([0-9]{8})$")]
[StringLength(20, ErrorMessage = "{0}的長度至少必須為{2}的字元。", MinimumLength = 1)]
}
在傳入進來的參數一律用 Model class在傳遞
而也可以透過[FormBody] , [FromUri]去指定這個Model Class
資料要從表單Body或Url參數來傳遞
ASP.NET WebAPI2第004天_請求內容回傳格式_客製化方法名稱_FromBody,FromUri用法
https://coolmandiary.blogspot.com/2021/12/aspnet-webapi2004frombodyfromuri.html
ASP.NET WebAPI2第005天_API驗證
https://coolmandiary.blogspot.com/2021/12/aspnet-webapi2005api.html