Я пытаюсь обработать исключения противодействия на клиенте и хочу показать пользователям соответствующее сообщение, но все, что я получаю. Net Главный сервер - это 400 Bad Request ответ, поэтому я пытаюсь переопределить это своим собственным ответом.
Поэтому я добавил фильтр:
using Microsoft.AspNetCore.Mvc.Core.Infrastructure;
using Microsoft.AspNetCore.Mvc.Filters;
namespace Website.Filters
{
public class RedirectAntiforgeryValidationFailedResultFilter : IAlwaysRunResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.Result is IAntiforgeryValidationFailedResult result)
{
[overraid response]
}
}
public void OnResultExecuted(ResultExecutedContext context)
{
if (context.Result is IAntiforgeryValidationFailedResult result)
{
[overraid response]
}
}
}
}
и на startup.cs
services.AddAntiforgery(options =>
{
options.SuppressXFrameOptionsHeader = true;
options.HeaderName = "......";
options.Cookie.Name = ".....";
options.Cookie.Path = "/";
options.Cookie.Expiration = TimeSpan.FromDays(2);
});
services.AddMvc(options =>
options.Filters.Add<RedirectAntiforgeryValidationFailedResultFilter>()
).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Я использую эта функция для установки токена защиты от подделки для пользователей
private static void SetToken(HttpContext context, IAntiforgery antiforgery)
{
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("....", tokens.RequestToken, new CookieOptions()
{
HttpOnly = false,
Secure = true,
MaxAge = TimeSpan.FromDays(2),
SameSite = SameSiteMode.Strict
});
}
Мне так и не удалось получить [ответ с перегрузкой].
Вы можете увидеть ниже Изображение, что результатом является действительно AntiforgeryValidationFailedResult и все еще не может go внутри условия.