[.NET Web API2]action object parameter 為null ModelBinding居然是對的?

.NET VERSION : .net framework 4.6.1 WebAPI 2

沒有想到在測試ModelBinding的時候卻發現這個問題

查了一下資料這個問題在.NET Core 2.0才修正 , 而且是需要特別設定 isValid才會是false

如果我想要某一些Action 傳入的parameter 必須不為null應該怎麼辦呢?

這個時候可以加 filter 

public class ModelValidateFilterAttribute : ActionFilterAttribute
{
    /// <summary>
    /// 剃除掉Action Parameter 是null的request
    /// </summary>
    /// <param name="httpActionContext"></param>
    public override void OnActionExecuting(HttpActionContext httpActionContext)
    {
        if (httpActionContext.ActionArguments.Any(v => v.Value == null))
        {
            httpActionContext.Response = httpActionContext.Request.CreateResponse(HttpStatusCode.BadRequest);
        }
        base.OnActionExecuting(httpActionContext);
    }
}

之後在你的Action上面加上這個Attribute就可以囉

[ModelValidateFilter]
public IHttpActionResult MyAction(LoginModel login)
{
   ....
}

相關連結:
ModelState.IsValid reports valid model while it is null
[Required] and [BindRequired] in ASP.NET Core MVC

-----------------------------------------

有時在會走之前你就得跑

你不解決問題 就等問題解決你