Если вы украсили метод действия контроллера атрибутом ValidateAntiForgeryToken
, вы не сможете выйти, не поместив скрытое поле в представление.
Вам нужно выяснить, где у вас есть атрибут ValidateAntiForgeryToken
, где скрытое поле для токена в представлении, но проверка токена возможна только при необходимости.
Для приведенного нижеРешение, я предполагаю, что у нескольких приложений, о которых вы говорите, есть файл web.config
.
Что вам нужно сделать, это ввести новую конфигурацию в appSettings
, такую как IsAntiForgeryTokenValidationEnabled
или более короткое имя.
Создайте новый класс атрибутов, как показано ниже, и проверьте значение конфигурации.Если значение конфигурации - true
, то можно проверить токен, в противном случае просто пропустите его.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CheckAntiForgeryTokenValidation : FilterAttribute, IAuthorizationFilter
{
private readonly IIdentityConfigManager _configManager = CastleClassFactory.Instance.Resolve<IIdentityConfigManager>();
public void OnAuthorization(AuthorizationContext filterContext)
{
var configValue = System.Configuration.ConfigurationManager.AppSettings["IsAntiForgeryTokenValidationEnabled"];
//Do not validate the token if the config value is not provided or it's value is not "true".
if(string.IsNullOrEmpty(configValue) || configValue != "true")
{
return;
}
// Validate the token if the configuration value is "true".
else
{
new ValidateAntiForgeryTokenAttribute().OnAuthorization(filterContext);
}
}
}
OnAuthorization
метод вышеупомянутого класса будет выполнен перед методом действия, в котором этот атрибут используется, и проверьте илине проверять токен на основе значения конфигурации.
Теперь вам нужно использовать этот атрибут в методе действия контроллера, как в следующем примере.
public class HomeController : Controller
{
[HttpPost]
[CheckAntiForgeryTokenValidation]
public ActionResult Save()
{
// Code of saving.
}
}
После этого все приложения, которые хотят проверитьAntiForgeryToken должен иметь конфигурацию IsAntiForgeryTokenValidationEnabled
в файле конфигурации со значением true
.Проверка токена по умолчанию недоступна, поэтому, если существующие приложения не имеют конфигураций, они по-прежнему работают без проблем.
Надеюсь, это поможет вам решить вашу проблему.