Bir ActionFilter
kullanabilirsiniz: aksiyon ModelState geçerli olmak ve kontrol etmek gerek değil güvenebileceğini eğer iyi olurdu. Global olarak değil, ancak problemi yöntem gövdesinden bir niteliğe taşıyor. Probleminizi tamamen çözmediğinin farkındayım, ama hiçbir şeyden daha iyi olmayabilir.
public class ModelStateValidationActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var modelState = actionContext.ModelState;
if (!modelState.IsValid)
actionContext.Response = actionContext.Request
.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
}
}
Ve denetleyicisi
:
[HttpPost]
[ModelStateValidationActionFilter]
public IHttpActionResult Post(object model)
{
}
ben siz de Kumandanızda ayarlayabilirsiniz inanıyoruz. Bunu gerçekten denemedim ama according to this işe yarayabilirdi.
[ModelStateValidationActionFilter]
public class MyApiController : ApiController
{
}
DÜZENLEME:
@Camilo Terevinto olarak, Çekirdek için biraz farklıdır söz. Core kullanmak istiyorsanız, sadece bu ActionFilter
kullanın.
public class ModelStateValidationActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
var modelState = context.ModelState;
if (!modelState.IsValid)
context.Result = new ContentResult()
{
Content = "Modelstate not valid",
StatusCode = 400
};
base.OnActionExecuting(context);
}
}
'ApiController' Web Api 2'den, bu ASP.NET Core artık yok. Bunun yanı sıra, filtrelerinize 'ActionFilterAttribute' yerine sadece 'Attribute' eklememelisiniz. Daha da fazla niyet, 'ValidateModelStateAttribute' –
olacaktır. Ayrıca, 'Startup' –
@CamiloTerevinto'da eylem filtreleri global olarak kaydedilebilir, evet, haklısınız. Çekirdek kısmını özledim.Cevabımı Core ile çalışacak uygun bir ActionFilterAttribute ile güncelledim. – smoksnes