我正在尝试同时访问两个网站,这两个网站都是使用MVC构建的。如果我m logged In in one, I can
访问另一个。我该如何纠正以下内容?
我收到错误消息:
无法验证数据。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Web.HttpException:无法验证数据。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
堆栈追踪:
[HttpException(0x80004005):无法验证数据。]
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(布尔 fEncrypt,Byte [] buf,Byte []修饰符,Int32 start,Int32 length, Boolean useValidationSymAlgo,Boolean useLegacyMode,IVType ivType, 布尔符号数据)+4956871
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(布尔 fEncrypt,Byte [] buf,Byte []修饰符,Int32 start,Int32 length, Boolean useValidationSymAlgo,Boolean useLegacyMode,IVType ivType) +155 System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)+283
MvcUI.MvcApplication.FormsAuthentication_OnAuthenticate(对象发送者, FormsAuthenticationEventArgs args)in C:\汞柱\ MyProject的\代码\ MvcUI \的Global.asax.cs:40
System.Web.Security.FormsAuthenticationModule.OnAuthenticate(FormsAuthenticationEventArgs e)+11497690
System.Web.Security.FormsAuthenticationModule.OnEnter(Object source, EventArgs eventArgs)+88
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+270
版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.237
为两个应用程序插入相同的计算机密钥后出现新的错误消息
值不能为空。 参数名称:value 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentNullException:值不能为null。 参数名称:值
来源错误:
第71行:{第72行:用户= myProject.API.User.Load(用户名);第73行: HttpContext.Current.Cache.Add(key,user,null,System.Web.Caching.Cache.NoAbsoluteExpiration,第74行:new TimeSpan(0,2,0),System.Web.Caching.CacheItemPriority.Default, 空值);第75行:}
[ArgumentNullException:Value不能为null。 参数名称:值] System.Web.Caching.CacheEntry..ctor(String key,Object value,CacheDependency依赖项,CacheItemRemovedCallback onRemovedHandler,DateTime utcAbsoluteExpiration,TimeSpan slidingExpiration,CacheItemPriority priority,Boolean isPublic)+8942559 System.Web.Caching.CacheInternal.DoInsert(Boolean isPublic,String key,Object value,CacheDependency dependencies,DateTime utcAbsoluteExpiration,TimeSpan slidingExpiration,CacheItemPriority priority,CacheItemRemovedCallback onRemoveCallback,Boolean replace)+93 System.Web.Caching.Cache.Add(String key,Object value,CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration,CacheItemPriority priority,CacheItemRemovedCallback onRemoveCallback)+81 C:\ Dev \ myProject \ Code \ MvcUI \ Global.asax.cs中的MvcUI.MvcApplication.GetUserFromCache(String userName):73 C:\ Dev \ myProject \ Code \ MvcUI \ Global.asax.cs中的MvcUI.MvcApplication.FormsAuthentication_OnAuthenticate(Object sender,FormsAuthenticationEventArgs args):40 System.Web.Security.FormsAuthenticationModule.OnAuthenticate(FormsAuthenticationEventArgs e)+9043237 System.Web.Security.FormsAuthenticationModule.OnEnter(Object source,EventArgs eventArgs)+84 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+148 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+75
的Global.asax.cs
public class MvcApplication:System.Web.HttpApplication { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("WebService/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
if (FormsAuthentication.CookiesSupported)
{
if (null != Request.Cookies[FormsAuthentication.FormsCookieName])
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
args.User = new myProject.Web.UI.Classes.UserPrincipal(GetUserFromCache(ticket.Name));
}
}
else
throw new HttpException("Cookieless Forms Authentication is not supported for this application.");
}
public void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs args)
{
string username = args.Identity.Name.Substring(args.Identity.Name.IndexOf("\\") + 1);
myProject.API.User user = GetUserFromCache(username);
if (null == user)
throw new HttpException("User could not be found.");
args.User = new myProject.Web.UI.Classes.UserPrincipal(user);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
private static myProject.API.User GetUserFromCache(string userName)
{
string key = "User " + userName;
myProject.API.User user = (myProject.API.User)HttpContext.Current.Cache[key];
if (null == user)
{
user = myProject.API.User.Load(userName);
HttpContext.Current.Cache.Add(key, user, null, System.Web.Caching.Cache.NoAbsoluteExpiration,
new TimeSpan(0, 2, 0), System.Web.Caching.CacheItemPriority.Default, null);
}
return user;
}
}
答案 0 :(得分:2)
我猜你在使用表单身份验证?也许两个cookie都是使用相同的域但不同的机器密钥创建的。
因此,当网站A创建cookie(家伙登录)然后你去网站B(未登录)时,网站B查看域名并说他们登录了这个人可以解密数据,但是因为cookie使用MACHINE KEY A加密,失败。
我的2c:)
答案 1 :(得分:1)
我猜是这样的:
1)您的网站使用2种不同的自动生成的MachineKey。 MachineKey是用于编码/解码表单身份验证cookie,哈希密码......的内容的常量键。
2)您在两个应用中使用了相同的applicationName。
3)我猜你也试图在同一台机器上设置测试版网站和制作网站。
答案 2 :(得分:-1)
感谢你们所有人试图回答这个问题。确实他们都很有帮助。我通过在wenconfig中添加一个machinekey来解决问题,并且表单名必须在那里。没有te表单名称,即使机器密钥也没用;