簡體   English   中英

C#MVC NerdDinner授權助手方法問題

[英]C# MVC NerdDinner authorization helper method problem

我目前正在閱讀ASP.NET MVC NerdDinner教程,並且遇到與用戶授權有關的特定幫助器方法的問題。 這個想法是,只有“擁有”特定晚餐的用戶才可以編輯或刪除它(基於Dinner對象的HostedBy屬性)。

晚飯對象中有以下方法:

public partial class Dinner {

    public bool IsHostedBy(string userName) {
        return HostedBy.Equals(userName, StringComparison.InvariantCultureIgnoreCase);
    }

    // other stuff removed for brevity

}

在我的視圖中,我試圖根據登錄用戶是否是晚餐的主持人顯示/隱藏鏈接:

<% if (Model.IsHostedBy(Context.User.Identity.Name)) { %>

    <%= Html.ActionLink("Edit Dinner", "Edit", new { id = Model.DinnerID })%>
    |
    <%= Html.ActionLink("Delete Dinner", "Delete", new { id = Model.DinnerID })%>    

<% } %>

問題在於IsHostedBy()永遠不會返回true。 我已經將User.Identity.Name和Dinner.HostedBy寫入屏幕以驗證它們是否相同,但是該方法仍然返回false。 我不確定如何找到問題所在。

我是C#和ASP.NET MVC的新手,因此很可能缺少一些簡單的東西。 感謝您的幫助,如果需要,我很樂意發布更多信息。

我猜HostedBy和userName實際上不是相同的字符串!

一些調試思路:

1)嘗試強制其始終返回true:

public bool IsHostedBy(string userName) {
    return true;
}

如果這樣可以使true返回視圖,則至少您可以知道正在執行IsHostedBy方法中編寫的代碼。

2)添加一個控制台輸出,自己查看兩個字符串是否確實相等:

   public bool IsHostedBy(string userName) {
        Console.WriteLine("userName: {0} / HostedBy: {1}", userName, HostedBy);  
        return true;
    }

這將幫助您檢查這些項目的值。 或者,您可以只在return語句中設置一個斷點,然后查看它們的含義。

當我在寫的時候,我不妨寫答案。

檢查兩個字符串中的錯誤空格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM