2011-07-22 30 views
10

Tôi đang làm việc trên ứng dụng mạng nội bộ MVC 3 (xác thực cửa sổ). Ứng dụng phải hiển thị trang hồ sơ của người dùng khi người dùng đăng nhập. Để làm được điều đó, tên người dùng của người dùng đã đăng nhập phải được chuyển thành tham số tuyến đường trong tuyến đường sau trong Global.asax.cs.Lấy tên người dùng đã đăng nhập trong ứng dụng mạng nội bộ ASP.NET MVC3

routes.MapRoute(
    "Initial", 
    "{controller}/{action}/{emailAlias}", // URL with parameters 
    new { controller = "Home", action = "Home", userId = **<USERNAME>**} 
); 

Ở đây, vì tôi đã sử dụng một số giải pháp thay thế.

  1. Lúc đầu, tôi đã sử dụng Environment.Username. Mà hoạt động tốt trong phát triển. Nhưng không phải sau khi xuất bản. Vì sau đó Environment.Username mang tên của hồ bơi ứng dụng mà ứng dụng chạy. Như được mô tả here.

  2. Controller.User.Identity.Name được sử dụng để lấy tên người dùng mong muốn trong bộ điều khiển, hoạt động tốt ở trước và sau xuất bản. Nhưng nó không thể được sử dụng trong bối cảnh Global.asax.cs.

  3. System.Web.HttpContext.Current.User.Identity.Name sản lượng tham chiếu null.

  4. System.Security.Principal.WindowsIdentity.GetCurrent().Name việc loại giống như Environment.Username

tôi chắc chắn rằng đó là dễ dàng để tìm ra rằng tôi là một Noob bởi bây giờ. Có lẽ tôi đã bỏ lỡ một cái gì đó hiển nhiên. Nếu vậy xin vui lòng chỉ ra rằng hoặc xin vui lòng cho tôi biết một giải pháp đơn giản cảm ơn trước.

+0

Vì vậy, khi tôi thay đổi userId thành tên người dùng của đồng nghiệp, tiểu sử của anh ấy sẽ hiển thị? – jao

Trả lời

13

Mã global.asax được cho là chạy lúc khởi động ứng dụng (và tắt) và bạn không có bất kỳ phiên hoặc người dùng nào tại thời điểm đó (do đó tên toàn cầu). Tại sao bạn cần tên người dùng trong tuyến đường? Bạn chỉ nên sử dụng User.Identity.Name trong mã của bộ điều khiển để xác định người dùng thay vì dựa vào việc lấy nó làm tham số.

+0

+1 để trỏ tới bộ điều khiển thay vì tuyến đường – jao

Các vấn đề liên quan