我的应用程序允许我们的销售团队管理不同客户的配置(例如:电子邮件模板,网站资源,CSS ...)。应用程序的每个页面都需要客户端ID,以指示正在修改哪个客户端。布局中有一个下拉列表,因此您可以在客户端之间切换。
到目前为止,我正在每个页面上传递id,并将其作为链接中的查询字符串传递
@Url.Action("Action", "Controller", new { clientId = Model.ClientId })
在包含客户端ID的每个表单中都有一个隐藏字段。
我不想使用会话,但随着应用程序的增长,在每个链接中传递客户端ID变得有点麻烦,并且在每种形式中都有隐藏字段。
您怎么看?
答案 0 :(得分:0)
在ASP.NET MVC 中,有三种方法 - ViewData, ViewBag and TempData
将数据从控制器传递到视图和下一个请求。与WebForm
一样,您也可以使用Session
在用户会话期间保留数据。他们每个人都有自己的重要性。
如何使用
public ActionResult Index()
{
ViewBag.Name = "Monjurul Habib";
return View();
}
public ActionResult Index()
{
ViewData["Name"] = "Monjurul Habib";
return View();
}
在视图中:
@ViewBag.Name
@ViewData["Name"]
答案 1 :(得分:0)
我建议使用声明而不是传递客户端ID。例如,只要您的客户端登录,您就将客户端的ID设置为声明(实际存储在Cookie中)。之后,通过Controller的Action Method,您可以检查Claim。以下是检查声明的示例:
public static bool HasClaim(string claimType, string claimValue)
{
ClaimsIdentity claimsIdentity = HttpContext.Current.User.Identity as ClaimsIdentity;
return claimsIdentity != null && claimsIdentity.HasClaim(claimType, claimValue);
}
我认为这种方式更容易,更易于维护,更清晰。我已回答了有关基于声明的访问控制的问题,您也可以在此处查看:
Role-based access control (RBAC) vs. Claims-based access control (CBAC) in ASP.NET MVC
您可以将ClaimsAuthorizeAttribute创建为
public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
private readonly string _claimType;
private readonly string _claimValue;
public ClaimsAuthorizeAttribute(string claimType, string claimValue)
{
this._claimType = claimType;
this._claimValue = claimValue;
}
private static bool IsLoggedIn
{
get {
return HttpContext.Current != null && HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated;
}
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
throw new ArgumentNullException("httpContext");
if (!IsLoggedIn)
return false;
return HasClaim(_claimType, _claimValue);
}
}
在Action方法中,按如下方式使用它:
[ClaimsAuthorize(ClaimTypes.Role, "Your Client Id")]
public ActionResult Index()
{
return View();
}
答案 2 :(得分:0)
将数据存储在会话中或设置自定义Cookie。
基于会话的解决方案的自定义cookie解决方案的一个论点是,当ASP.NET必须查找会话并反序列化/序列化数据时,会涉及一些开销。