gpt4 book ai didi

asp.net-mvc - ASP.Net MVC 4 通用主要困难

转载 作者:行者123 更新时间:2023-12-03 14:00:38 24 4
gpt4 key购买 nike

我正在开发 ASP.Net MVC 4 Web应用程序。以前我的 MVC 应用程序是使用 开发的。 MVC 3 和这个新的 MVC 4 我刚刚复制/重复使用了我的 的应用程序认证授权码从以前的应用程序。

当用户登录我的网站时,我会执行以下操作

账户控制人

public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
User user = _userService.GetUser(model.Email.Trim());

//Create Pipe Delimited string to store UserID and Role(s)
var userData = user.ApplicantID.ToString();

foreach (var role in user.UserRoles)
{
userData = userData + "|" + role.description;
}

_formAuthService.SignIn(user.ApplicantFName, false, userData);

return RedirectToAction("Index", "Portfolio");
}

return View(model);
}

FormsAuthenticationService
public class FormsAuthenticationService : IFormsAuthenticationService
{
public void SignIn(string userName, bool createPersistentCookie, string UserData)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");

// Create and tuck away the cookie
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddDays(15), createPersistentCookie, UserData);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(authTicket);

//// Create the cookie.
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
HttpContext.Current.Response.Cookies.Add(faCookie);
}
}

全局.asax
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{

// Get the authentication cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];

// If the cookie can't be found, don't issue the ticket
if (authCookie == null) return;

// Get the authentication ticket and rebuild the principal
// & identity
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

string[] UserData = authTicket.UserData.Split(new Char[] { '|' });

GenericIdentity userIdentity = new GenericIdentity(authTicket.Name);
GenericPrincipal userPrincipal = new GenericPrincipal(userIdentity, UserData);
Context.User = userPrincipal;

}

此代码在我以前的 MVC 3 应用程序中运行良好,但在此 MVC 4 应用程序中,在 Razor View 中,以下代码似乎无法访问 IsInRole 执行角色检查的属性
@if (HttpContext.Current.User.IsInRole("Applicant"))
{
<p>text</text>
}

同样,这在我的 MVC 3 应用程序中运行良好。

有人对为什么这不适用于我的 MVC 4 应用程序有任何想法或建议吗?

任何帮助深表感谢。

谢谢。

额外信息

我的 MVC 4 应用程序正在使用 .Net Framework 4.0

下面的截图显示了我的 通用主体 分配给 上下文.用户 .您可以看到对于此用户, m_roles 包含两个字符串, 用户名 (100170) 和他们的 角色 (申请人)。但由于某种原因, IsInRoles 在我的 中无法访问或查看MVC 4 但是,Razor View 可以在我相同的 中使用。 MVC 3 Razor View 。
enter image description here

最佳答案

乡亲

我终于解决了这个问题。它默认显示为 SimpleMembershipProvider 在您创建新的 ASP.NET MVC 4 应用程序时启用。我不想使用 SimpleMembershipProvider 但是,在这种情况下,我需要在我的网络配置中使用以下行禁用它

<appSettings>
<add key="enableSimpleMembership" value="false" />
</appSettings>

我的电话 用户.IsInRole 现在效果很好。

希望这对其他人有帮助。

关于asp.net-mvc - ASP.Net MVC 4 通用主要困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com