iT邦幫忙

0

驗證前端送進來的值,驗證錯誤方法

請教在寫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)
{

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
Yaowen
iT邦研究生 4 級 ‧ 2021-12-15 20:57:14

你直接在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)]
        }

剛好我今年鐵人賽也有講
https://ithelp.ithome.com.tw/articles/10261847

Jason iT邦新手 4 級 ‧ 2021-12-16 09:48:05 檢舉

感謝,這個我知道,不過你這裏整理出來更詳細,只是我用的是HttpRequest _request = HttpContext.Current.Request;
_request.Form.Get("XXX")
這個方法來接收,並沒有辦法使用到Models裡的Class

1
Samuel
iT邦好手 1 級 ‧ 2021-12-16 06:45:46

在傳入進來的參數一律用 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

我要發表回答

立即登入回答