2011-10-18 14 views
8

Ecco una costante di classe che uso per richiamare alcuni aiutanti:Un argomento attributo deve essere un'espressione costante, typeof espressione o la creazione di matrice espressione di un tipo di parametro di attributo

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

Ed ecco come invoco in uno dei le mie forme nella mia MVC3 applicazione 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" /> 
} 

e nel mio controller:

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

L'errore è sparato nel mio Controller, si dice:

Un argomento attributo deve essere un'espressione costante, typeof espressione o la creazione matrice espressione di un tipo di parametro di attributo

Tutte le idee perché questo isn funziona? L'attributo Salt del decoratore ValidateAntiForgeryToken è una stringa e la mia costante è anche una stringa, quindi sono confuso.

risposta

20

Una stringa statica non è una costante.

Prova a cambiare

public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 

a

public const string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 
Problemi correlati