簡體   English   中英

三層Web應用程序

[英]Three Layered Web Application

是否可以 - 最好的做法 - 使用第二層重定向用戶?

例如:

public static void ForceLogin()
{
    HttpCookie cookie = HttpContext.Current.Request.Cookies[cookieName];

    if (cookie != null)
    {
        if (Regex.IsMatch(cookie.Value, "^[0-9]+\\.[a-f0-9]+$"))
        {
            using (EibxDataContext db = new EibxDataContext())
            {
                int count = db.Logins.Count(l => l.Password == cookie.Value);

                if (count == 1)
                {
                    return;
                }
            }
        }
    }

    HttpContext.Current.Response.Redirect("~/Login.aspx");
}

在最后一行,我使用業務/服務邏輯層將用戶重定向到登錄頁面。

這應該在Presentation層中完成嗎?

絕對不。 業務邏輯層應該做出決定,UI層應該進行重定向。 業務層不應該對HttpContext有任何了解,也不應該直接讀取cookie。 將相關信息傳遞到業務層,以便業務層可以做出決策,並將決策傳遞給UI層,以便它可以處理由此產生的決策。

這就是原因......如果從Web服務使用業務層會怎么樣? 業務層如何在該實例中進行重定向? 或者假設它與非Web客戶端一起使用? 重定向在該上下文中沒有意義。 如果您更改了UI圖層,這不應該影響您的業務邏輯層,並且將重定向和cookie讀取混合到業務層中將需要使用所提議的設計。

這取決於您如何定義圖層; 例如,我的“業務邏輯”通常與我試圖解決的問題有關,並且對UI沒有任何了解。 因此它無法進行重定向,因為它無法訪問請求/響應。

就個人而言,我會在UI層執行此操作; 處理諸如守門人和監護人之類的原始交互是UI層的Web應用工作的一部分。 IMO。 例如,通過http模塊,(根據定義)是UI級組件。

我會說你在業務邏輯中這樣做是對的。 表示層不應該做出關於路由的決定。

暫無
暫無

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

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