2011-10-18 39 views
8

Dưới đây là một lớp liên tục tôi sử dụng để gọi một số người giúp đỡ:Một cuộc tranh cãi thuộc tính phải là một biểu thức hằng số, typeof biểu hiện hoặc tạo mảng biểu hiện của một loại tham số thuộc tính

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

Và dưới đây là cách tôi gọi nó bằng một trong hình thức của tôi trong MVC3 ứng dụng web của tôi:

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

Và trong điều khiển của tôi:

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

Các lỗi được bắn trong điều khiển của tôi, nó nói:

Một cuộc tranh cãi thuộc tính phải là một biểu thức hằng số, typeof biểu hoặc tạo mảng biểu hiện của một loại tham số thuộc tính

ý tưởng Bất kỳ lý do tại sao isn này không làm việc? Thuộc tính Salt của trình trang trí ValidateAntiForgeryToken là một chuỗi và hằng số của tôi cũng là một chuỗi, vì vậy tôi bị nhầm lẫn.

Trả lời

20

Chuỗi tĩnh không phải là hằng số.

Hãy thử thay đổi

public static string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 

để

public const string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 
Các vấn đề liên quan