Атрибут проверки ASP.NET Core - PullRequest
0 голосов
/ 08 января 2019

Я переносу приложение MVC .NET Framework 4.7.2 в приложение .NET Core 2.1.

Моя ViewModel выглядит так:

public class MyViewModel, IValidatableObject
{
    [Required(ErrorMessage = "Please enter a name")]
    public string Name { get; set; }

    //Other props removed for brevity
}

У меня есть вызов ajax для сохранения данных на экране, который обращается к API с атрибутом JsonValidationFilter, как показано ниже:

    [HttpPost]
    [JsonValidationFilter]
    [Route("api/MyController/Id}/Save")]
    public async Task<IActionResult> SaveAsync(int Id, MyViewModel model)
    {
        //code removed for brevity
        _myService.Save();

        return Ok();
    }

Таким образом, код в моем ValidationFilter для версии приложения .NET Framework выглядит следующим образом:

public class JsonValidationFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (actionContext.ModelState.IsValid) return;
        var errorMessages = actionContext.ModelState.Values
            .SelectMany(modelState => modelState.Errors.Select(x => x.ErrorMessage));
        actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, Json.Encode(errorMessages));
    }
}

И если я пытаюсь сохранить экран с именем, я попадаю в функцию ошибки моего Ajax-вызова, и появляется сообщение о проверке, и ошибка проверки содержится в xhr.responseText , поэтому он отображается как ожидается.

                error: function (xhr) {

                    $(saveAlertTarget).html('<span class="glyphicon glyphicon-warning-sign"></span>There was a problem with the last save attempt');
                    if (xhr.status == '400') {
                        displayErrorMessage("Please fix validation errors before saving", xhr.responseText);
                    }
                }

Я попытался переписать фильтр проверки в .NET Core, как показано ниже, - и я попадаю в часть ошибки моего Ajax-вызова с запросом 400, поэтому отображается предупреждение о проверке, но оно никогда не формирует сообщение полностью, потому что xhr.responseText всегда пусто - я что-то пропустил, настраивая это?

Мой .NET Core JsonValidationFilter

public class JsonValidationFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext actionContext)
    {
        if (actionContext.ModelState.IsValid) return;
        IEnumerable<string> errorMessages = actionContext.ModelState.Values.SelectMany(modelState => modelState.Errors.Select(x => x.ErrorMessage));
        actionContext.Result = new BadRequestObjectResult(errorMessages);
    }
}

1 Ответ

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

Это была проблема с моей функцией java-скрипта displayErrorMessage - C # .NET Core Json Validation Filter работал как положено

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