2011-10-18 53 views
8

Aquí está una clase constante utilizo para invocar algunos ayudantes:Un argumento atributo debe ser una expresión constante, typeof expresión o la creación de la matriz expresión de un tipo de parámetro atributo

public static class SecurityHelpers 
{ 
    public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner";   
} 

Y aquí es como invoco en una de mis formas en mi MVC3 aplicación web:

@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" /> 
} 

y en mi controlador:

[HttpPost] 
[ValidateAntiForgeryToken(Salt = SecurityHelpers.AntiforgeryTokenSalt)] 
public ActionResult Index(decimal amount, string currency, string itemDescription, string type) 
{ 
    if (!User.Identity.IsAuthenticated) return RedirectToAction("LogOn", "Account"); 
} 

El error se dispara en mi controlador, que dice:

Un argumento atributo debe ser una expresión constante, typeof expresión o creación de la matriz expresión de un tipo de parámetro atributo

Cualquier idea por qué esto no es no funciona? El atributo Salt del decorador ValidateAntiForgeryToken es una cadena y mi constante también es una cadena, por lo que estoy confundido.

Respuesta

20

Una cadena estática no es una constante.

intente cambiar

public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 

a

public const string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 
Cuestiones relacionadas