首页 新闻 会员 周边 捐助

MVC中关于Request有时获取不到cookies的值,从而取不到identity.name

0
悬赏园豆:10 [已关闭问题]

在Global.asax中,我定义了一个Application_AuthenticateRequest,代码如下:

 

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket
= FormsAuthentication.Decrypt(authCookie.Value);
JIdentity identity
= new JIdentity(authTicket);
JPrincipal principal
= new JPrincipal(identity);
HttpContext.Current.User
= principal;
Thread.CurrentPrincipal
= principal;
}

 

每当我发出请求的时候,都是执行以上代码,判断是否验证。

 

但是我发现,有的时候我通过AJAX请求一个Action的时候,在执行以上代码的时候,authTicket为空,即Request.Cookies取不到值。譬如我通过以下JS代码:

 

$("#uploadify").uploadify({
uploader:
'/Skins/Shared/uploadify/uploadify.swf',
script:
'Upload',
method:
'POST',
cancelImg:
'/Skins/Shared/uploadify/cancel.png',
fileDesc:
'支持类型(图像、Office、视频、文本、压缩文件)',
multi:
true,
fileExt:
'*.jpg;*.jpeg;*.gif;*.png;*.doc;*.xls;*.ppt;*.pdf;*.txt',
onAllComplete:
function(event, data) {
alert(
'上传成功,总共上传了' + data.filesUploaded + ",错误内容:" + data.errors);
}
});

上面script: 'Upload'就是我调的一个Action,如下:

 

[HttpPost]
public ActionResult Upload()
{
List
<object> fileList;
if (TempData["files"] != null)
{
fileList
= (List<object>)TempData["files"];
}
else
{
fileList
= new List<object>();
}
if (Request.Files.Count > 0)
{
var file
= Request.Files[0];
file.SaveAs(Server.MapPath(
"/Temp/")+file.FileName);
fileList.Add(file);
TempData.Add(
"files", fileList);
}
return Json(true);
}

 

如果我在以上代码里加上 User.Identity ,取出的是一个未获得验证的信息,也就是因为上面 Request的时候获取不到Cookie中验证的信息。

不知道为什么,希望大家帮忙研究下。

顺便问下,在以上Action中的file.SaveAs后,我Session或者TempData保存的值都会丢失,如何解决呢?有什么办法在执行完这个方法后,能在另外一个Action中取到这里我所保存的值(这里需要注意的是,由于是多文件上传,所以这个Upload的Action会有几个文件就执行几次)。有办法的和我分享下吧!

J.I.E的主页 J.I.E | 初学一级 | 园豆:187
提问于:2010-06-08 21:54
< >
分享
其他回答(2)
0

偶认为你应该改变一下程序的架构,定义一个基类BaseController ,在这里面实现验证,然后的别Controller都继承这个基类的,也许能解决此问题

觉知的凡夫 | 园豆:468 (菜鸟二级) | 2010-06-09 10:02
0

我也遇到同样的问题,不好解决啊。

pic_name | 园豆:205 (菜鸟二级) | 2010-06-23 12:13
0

我一个页面, 页面有模板页,页面有继承自己写的基类用来做登录判断,模板页也有基类做登录判断,页面,模板页都判断登录成功有Cookie值,但是,这个页面中访问另一个页面加载数据的时候,读取数据的那个页面也是继承了基类做了登录判断的,然而,这个页面居然获取到的Cookie值为空,也就是说没有登录,然后就得不到相关的数据了,这个才是头大啊

Nanjim | 园豆:204 (菜鸟二级) | 2017-05-15 17:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册