ASP.NET Web Api> Остановить действие при возникновении ошибки проверки - PullRequest
0 голосов
/ 03 января 2019

Я работаю над проектом Web API.Я использую System.Web.Http.ApiController в качестве базы для моего контроллера

using System.Net;
using System.Web.Http;
using project.Models;

namespace project.Controllers
{
    public class DemoController : ApiController
    {
        [HttpPost]
        [Route("api/demo/submit")]
        public  object Post([FromBody] FormDataModel test)
        {
            ...
        }
    }
}

Пока моя модель

using System;
using System.ComponentModel.DataAnnotations;

namespace server.Models
{
    public class FormDataModel
    {
        [Required(ErrorMessage = "Phone is required")]
        [Phone(ErrorMessage = "Invalid Phone")]
        public string phone { get; set; }
    }
}

Когда я отправляю неверный запрос POST - действие Post все еще действуетказнены.Я могу отследить недействительные запросы с помощью ModelState.IsValid, но это кажется избыточным шагом, поскольку я всегда хочу, чтобы мои действия останавливали выполнение с той же формой ответа, если проверка не удалась.

Есть листандартный способ управления ошибкой проверки для всего контроллера / приложения в одном месте?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вот ActionFilter, который я использую, чтобы сделать то, что вы просите

public class ModelStateValidationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (!actionContext.ModelState.IsValid)
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,
                actionContext.ModelState);
        }
    }
}

Затем просто зарегистрируйте его как глобальный обработчик

public static class FilterConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Filters.Add(new ModelStateValidationAttribute());
    }
}
0 голосов
/ 03 января 2019

Я считаю, что вы можете сделать это с помощью ActionFilters.Проверьте эту отличную статью:

https://smellyc0de.wordpress.com/2017/08/23/web-api-2-centralised-model-state-validation/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...