Ich habe bereits einen HTTPHandler geschrieben, der von einer ColdFusion-Seite POSTED wird, und es funktioniert erfolgreich; Jetzt versuche ich eine Webanwendung in ASP.NET zu schreiben, damit ich ein Formular an den .ashx-Handler von einer ASPX-Seite aus senden kann.Warum mein httpwebrequest-Post zu myhandler.ashx mit Statuscode 401 zurückgewiesen wird
Anwendung Trace (trace.axd) zeigt die folgenden als meine letzten 3 Einträge:
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
Ich habe einen Haltepunkt in meiner .ashx-Datei, aber es wird nie erreicht (ich denke, da der Statuscode 401). Hier ist der Code-Schnipsel aus dem default.aspx versucht, an den Handler POST:
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);
}
}
}
Hier ist ein Code-Snippet aus der UploadHandler.ashx Datei (aber das scheint nicht zu sein erreicht):
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());
}
Beide default.aspx und UploadHandler.ashx in der Wurzel eines virtuellen Verzeichnisses sind auf meinem localhost; Die Verzeichnissicherheit ist derzeit auf "Anonymer Zugriff" CHECKED und "Integrierte Windows-Authentifizierung" festgelegt.
Wenn ich auf den Link "Details anzeigen" in der Anzeige "trace.axd" klicke, sehe ich alle Daten in der Forms-Sammlung, die ich sehen und verarbeiten möchte, aber diese 401 scheint alles zu stoppen. Ich könnte den Code für meine kleine Funktion BuildFormData(), wenn nützlich, veröffentlichen.
EDIT: Überarbeitete Handler wie folgt (hatte keine Wirkung, gleiche Fehler tritt auf):
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 });
}
}
Danke. Dein Punkt scheint gültig zu sein, aber kannst du mehr darüber sagen, warum ich nicht einmal auf der Linie stehe, die du zeigst. Das ist, warum die 401 auftritt und wie ich das beheben konnte. Ich werde mich später um die Rückkehr zum POSTER sorgen. –
Was passiert beim Entfernen von context.Response.Redirect (msgReturn.ToString()) ;? – Keltex
Bitte beachten Sie meine EDIT in der Frage, wo ich meine überarbeitete ProcessRequest() in der .ashx-Datei zeigen ..... trace.axd zeigt die gleichen 401 Fehler auftritt jedoch so das scheint nicht so weit zu sein. –