1

ColdFusionページからPOSTされたHTTPHandlerはすでに作成されていますが、正常に動作します。 ASP.NETでWebアプリケーションを作成しようとしています。.aspxページから.ashxハンドラにフォームを送信できます。myhandler.ashxへの私のhttpwebrequest投稿がステータスコード401で拒否された理由

アプリケーションのトレース(trace.axd)私の最後の3つのエントリとして次を示しています。

2 8/14/2009 1:53:56 PM /Default.aspx  200 GET View Details 
3 8/14/2009 1:54:04 PM /Default.aspx  200 POST View Details 
4 8/14/2009 1:54:13 PM /UploadHandler.ashx 401 POST View Details 

私は.ashxファイルにブレークポイントを持っていますが、それが原因で401のステータスコードの私は推測する(到達されることはありません)。ここでは、ハンドラに投稿しようとしているのdefault.aspxからのコードの抜粋は以下のとおりです。ここで

protected void UploadHandlerButton_Click(object sender, EventArgs e) 
{ 
    if (FileUpload1.HasFile) 
    { 
     try 
     { 
      ASCIIEncoding encoding = new ASCIIEncoding(); 
      byte[] data = encoding.GetBytes(BuildFormData()); 
      string baseAddress = "http://" + Environment.MachineName; 
      string pathInfo = Page.ResolveUrl("UploadHandler.ashx"); 
      string URI = baseAddress + pathInfo; 
      HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URI); 
      myRequest.Method = "POST"; 
      myRequest.ContentType = "application/x-www-form-urlencoded"; 
      myRequest.ContentLength = data.Length; 
      Stream newStream = myRequest.GetRequestStream(); 
      newStream.Write(data, 0, data.Length); 
      newStream.Close(); 
     } 
     catch (Exception someError) 
     { 
      LogText("FAILURE: " + someError.Message); 
     } 
    } 
} 

UploadHandler.ashxファイルからのコードの抜粋である(しかし、これはあるようには見えません到達):

public void ProcessRequest(HttpContext context) 
    { 
     string returnURL = context.Request.ServerVariables["HTTP_REFERER"]; 
     string message; 
     message = UploadFile(context); 
     StringBuilder msgReturn = new StringBuilder(returnURL); 
     msgReturn.Append("?n="); 
     msgReturn.Append(HttpUtility.UrlEncode(TRIMrecNumAssigned)); 
     msgReturn.Append("&m="); 
     msgReturn.Append(HttpUtility.UrlEncode(message)); 
     context.Response.Redirect(msgReturn.ToString()); 
    } 

のdefault.aspxとUploadHandler.ashxの両方が私のローカルホスト上の仮想ディレクトリのルートにあります。ディレクトリセキュリティが現在「匿名アクセス」に設定されています。「CHECKED」と「Windows統合認証」がチェックされています。

trace.axdディスプレイの[詳細を表示]リンクをクリックすると、私が見たいと思うFormsコレクションのすべてのデータが表示されますが、この401はすべてを停止しているようです。便利な場合はBuildFormData()という小さな関数用のコードを投稿することができます。

EDIT:改訂ハンドラ(影響を与えなかった。同じエラーが発生します)、次のように:

あなたのprocessRequest(見れ
public void ProcessRequest(HttpContext context) 
    { 
     //----------------------------------------------------------------------------------------- 
     // the remainder of this block is alternative to the .Redirect and is useful for debugging. 
     context.Response.ContentType = "text/html"; 
     //context.Response.Write(TRIMrecNumAssigned); 
     //context.Response.Write("<p>"); 
     //context.Response.Write(msgReturn); 
     context.Response.Write("<H1>Trim - Kerberos Prototype for ColdFusion consuming pages</h1>"); 
     HttpContext.Current.Trace.IsEnabled = true; 
     HttpContext.Current.Trace.Write(null); 
     HttpContext.Current.Trace.Write("-------"); 
     HttpContext.Current.Trace.Write(context.Request.Form["txtTrimRecordType"]); 
     HttpContext.Current.Trace.Write(GetUserInfo()); 
     HttpContext.Current.Trace.Write("-------"); 
     HttpContext.Current.Trace.Write(null); 
     using (Html32TextWriter htw = new Html32TextWriter(context.Response.Output)) 
     { 
      typeof(TraceContext) 
       .GetMethod("Render", BindingFlags.NonPublic | BindingFlags.Instance) 
       .Invoke(HttpContext.Current.Trace, new object[] { htw }); 
     } 
    } 

答えて

0

)、あなたは次のようにします。どのように基づいて

string returnURL = context.Request.ServerVariables["HTTP_REFERER"]; 

HttpWebRequestで呼び出すと、この変数はnullになります。あなたはmsgReturnを作成するときに、それは次のようになります:あなたはこのURLにリダイレクトする場合

?n=XXX%m=YYY 

、おそらく401

+0

ありがとうございました。あなたのポイントは有効だと思われますが、なぜ私があなたが見せているラインで止まらないのかについてもっとコメントすることができます。つまり、なぜ401が発生し、どうやって解決できるのでしょうか。私は後でポストに戻ることについて心配します。 –

+0

context.Response.Redirect(msgReturn.ToString());を削除するとどうなりますか? – Keltex

+0

.ashxファイル内の私の修正されたProcessRequest()を表示しているところの私のEDITを見てください..... trace.axdは同じ401エラーが発生していることを示しています。 –

1

を返しているものですが見出されることはありませんあなたは回しみましたオフWindows認証を統合し、匿名のままにしておくだけですか?違いはありますか?

あなたの答え:は「私はそれが物事悪化したと思う今私もDefault.aspxのために閲覧することができないので、私はこれを取得:HTTP 401.3 - リソースインターネットインフォメーションサービス上のACLによってアクセスが拒否されました」

私を応答:これは実際には良いことです。つまり、何が起こっているのかに近づいています。そのエラーメッセージが表示され、有効にしたのはIIS経由の匿名認証だけです。つまり、ASP.NET偽装ユーザーには問題のファイルに対するNTFSアクセス許可がありません。

XPまたはWin 2k3を使用しているかどうかはわかりませんが、ASPNET(XP)またはネットワークサービス(Win 2k3)のユーザーが少なくともファイルに対して読み取りアクセス権を持っていることを確認したい問題のユーザーが少なくともそのレベルのアクセス権を持っていることを確認し、それがどのように進んでいるか教えてください。

更新:私はなぜこのことについて考えなかったのか分かりません。 HttpWebRequestで資格情報を設定する必要があるかもしれません。現在のユーザーの資格情報を使用するには、リクエストにこれを追加してみてください。

HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URI); 
myRequest.Credentials = CredentialCache.DefaultCredentials; 

あなたはgood explanation of credentials hereがありますNetwork Credentials

試すことができ、別の資格情報を追加する必要がある場合。

これが役に立ちます。

+0

懐疑的ですが(私は.ashxファイルをデバッグしたいと思いますが、VstudioデバッガにはInt.Win.Authが必要です)、私はあなたの考えを試してみると思いました。私は、default.aspxを参照することさえできないので、状況が悪化したと思います。私はこれを得ます: HTTP 401.3 - リソース上のACLによってアクセスが拒否されました インターネットインフォメーションサービス –

+0

ありがとうございます。私はXPとIIS 5.1を実行するJOHNXPと呼ばれる独自の開発用PCで動作しています。仮想ディレクトリは、ローカルパスを指すHTTPHandleTRIMと呼ばれます。 C:¥Documents and Settings¥johna¥My Documents¥Visual Studio 2005¥Projects¥HandlersTRIM まず、上記のフォルダHandlersTRIMにJOHNXP \ ASPNETを追加し、それを与えました「読み込みと実行」、「フォルダの一覧表示」、「読み込み」のアクセス許可が必要です。 次に、匿名で有効にして統合されたWindows認証をチェックしたところ、同じ結果が得られました(401はUploadHandler.ashxにPOSTしようとしています)。 次に、「統合Windows認証」が不明です。 (続き) –

+0

"IWA"がチェックされていないと、default.aspxページを参照することさえできませんでした。そこで、IUSR_JOHNXPを追加し、匿名ユーザーに上記と同じパーミッションを与えました( "Read&Execute"など)。 401の代わりに302を取得しました。これらのエラーの詳細な理由コードまたはサブステータスコードを取得する方法はありますか? –

関連する問題