2011-10-18 38 views
8

這裏有一個恆定的I類用來調用一些助手:的屬性參數必須是常量表達式的typeof屬性參數類型的表達式或數組創建表達式

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

這裏就是我如何調用它在一個我的形式我MVC3 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" /> 
} 

在我的控制器:

[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屬性參數類型

任何想法,爲什麼這個ISN的表達 或數組創建表達式沒有工作? ValidateAntiForgeryToken裝飾器的Salt屬性是一個字符串,我的常量也是一個字符串,所以我很困惑。

回答

20

靜態字符串不是常量。

嘗試改變

public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 

public const string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 
相關問題