2012-03-01 12 views
1

ハンドラファイル内のHttpContext.Current.User.Identity.Nameから応答を取得できません。データはそれに渡されていませんか?HttpContext.Current.User.Identity.Nameが.ashxハンドラで動作しない

<%@ 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; 
     } 
    } 

} 
+1

ウェブサイトでログインする必要がありますか?また、 'HttpContext.Current'は必要ありません。context.User.Identity.Name'という' context'パラメータを使うことができます。 – jrummell

答えて

1

パラメータcontextを代わりに使用してください。

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

データが渡されていない

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

'User.Identity.Name'が設定されているかどうかは違いはありませんが、私はこの変更を行います。 – jrummell

3

に変身?

あなたにこれを伝えることはできません。あなたがハンドラを呼び出すのはあなただから、認証クッキーを渡すかどうかはあなた次第です。

これは、あなたのハンドラがファイルのアップロードを扱うようだと言われています。あなたがそれを呼び出す方法は私たちにとって完全な謎ですが、Uploadifyのようなクライアント側のアップロードコンポーネントをFlashに依存するものを使用している場合、このコンポーネントは認証とセッションCookieを要求とともに送信していない可能性があります。

this blog postで説明されているような回避方法があります。このsimilar questionにも記載されています。

+0

私は一日中、ファイルのアップロードエンドポイントを除くすべてのリクエストで認証が動作している理由を突きつけようとしています。私のhttpラッパーを使ってauthトークンを使ってajaxリクエストを送信しているのではなく、代わりにhtmlフォームから直接投稿しています。ありがとうございました!人生の節約。だからうれしく私はこれを見つけた。 – Ryan

1

ユーザーセッションが必要な場合は、IRequiresSessionStateインターフェイスも実装する必要があります。しかし、おそらくコンテキストはあなたのために十分ですか?

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

あなたは、このようなUploadifyPluploadとして任意のクライアント側のコンポーネントを使用している場合は、コンポーネントが要求を認証し、セッションクッキーを送信していないことをすることができます。ここにはworkaroundの説明があります。

チェックアウトUploadify (Session and authentication) with ASP.NET

関連する問題