Аргумент атрибута должен быть выражением константы, выражением typeof или выражением создания массива типа параметра атрибута
вот постоянный класс, который я использую для вызова некоторых помощников:
public static class SecurityHelpers
{
public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner";
}
и вот как я вызываю его в одной из моих форм в моем веб-приложении MVC3:
@using (Html.BeginForm("Index", "Checkout", FormMethod.Post))
{
<input type="hidden" name="amount" value="@Model.PackageCost"/>
<input type="hidden" name="currency" value="$"/>
<input type="hidden" name="itemdescription" value="@Model.PackageDescriptor"/>
<input type="hidden" name="type" value="digital"/>
@Html.AntiForgeryToken(App.WebUI.Helpers.SecurityHelpers.AntiforgeryTokenSalt)
<input type="submit" value="Confirmar" class="btn primary frmsubmit" />
}
и в моем контроллере:
[HttpPost]
[ValidateAntiForgeryToken(Salt = SecurityHelpers.AntiforgeryTokenSalt)]
public ActionResult Index(decimal amount, string currency, string itemDescription, string type)
{
if (!User.Identity.IsAuthenticated) return RedirectToAction("LogOn", "Account");
}
ошибка срабатывает в моем контроллере, он говорит:
аргумент атрибута должен быть постоянным выражением, typeof expression или выражение создания массива типа параметра атрибута
любые идеи, почему это не работает? The Salt
атрибут декоратора ValidateAntiForgeryToken-это строка, и моя константа также является строкой, поэтому я запутался.
1 ответов
статическая строка не является постоянной.
попробуйте изменить
public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner";
to
public const string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner";