HttpContext.Current.User.Identity.Name在.ashx hander中不起作用

本文关键字:ashx hander 不起作用 Name Current User Identity HttpContext | 更新日期: 2023-09-27 18:26:15

我无法从处理程序文件中的HttpContext.Current.User.Identity.Name获得响应。数据没有传递给它吗?

<%@ WebHandler Language="C#" Class="uploadHandler" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public class uploadHandler : IHttpHandler {
    public void ProcessRequest(HttpContext context)
    {
        HttpPostedFile file = context.Request.Files["fileData"];
        string targetLocation = "D:''inetpub''wwwroot''upload.website.com''www''uploads''" + HttpContext.Current.User.Identity.Name + "''" + file.FileName;
        file.SaveAs(targetLocation);

        context.Response.ContentType = "text/plain";
        context.Response.Write("Hello World");
        context.Response.Write(HttpContext.Current.User.Identity.Name);
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}

HttpContext.Current.User.Identity.Name在.ashx hander中不起作用

数据没有传递给它吗?

别指望我们能告诉你这些。您是调用处理程序的人,所以是否传递身份验证cookie取决于您自己。

话虽如此,似乎您的处理程序处理文件上传。您的调用方式对我们来说完全是个谜,但如果您使用的是一些客户端上传组件,如依赖Flash的Uploadify,则该组件可能不会在请求时发送身份验证和会话cookie。

正如这篇博客文章中所解释的,有一些变通办法。也讨论了这个类似的问题。

如果需要usersSession对象,该类可能还应该实现接口IRequiresSessionState。但也许上下文对你来说已经足够了?

public class uploadHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{
...
}

请改用参数context

context.Response.Write(HttpContext.Current.User.Identity.Name);

变成

context.Response.Write(context.Current.User.Identity.Name);

如果您使用任何客户端组件,如Uploadify、Plupload,则可能是该组件没有随请求发送身份验证和会话cookie。对于变通方法,这里有一个很好的解释。

使用ASP.NET 查看Uploadify(会话和身份验证)