J'ai déjà écrit un HTTPHandler qui est POSTé à partir d'une page ColdFusion et fonctionne correctement; maintenant, j'essaye d'écrire une application web dans ASP.NET pour pouvoir poster un formulaire au gestionnaire .ashx à partir d'une page .aspx.Pourquoi mon post httpwebrequest sur myhandler.ashx est-il rejeté avec le code d'état 401
Trace (Application trace.axd) montre ce qui suit comme mes dernières 3 entrées:
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
J'ai un point d'arrêt dans mon fichier .ashx mais il est jamais atteint (je suppose à cause du code d'état 401). Voici l'extrait de code de la default.aspx essayant de POST au gestionnaire:
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);
}
}
}
Voici un extrait de code du fichier UploadHandler.ashx (mais cela ne semble pas être atteint):
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 et UploadHandler.ashx sont à la racine d'un répertoire virtuel sur mon localhost; la sécurité du répertoire est actuellement définie sur "Accès anonyme" CHECKED et "Authentification Windows intégrée" CHECKED. Lorsque je clique sur le lien "Afficher les détails" sur l'affichage de trace.axd, je vois toutes les données de la collection Forms que je m'attends à voir et que j'espère traiter, mais ce 401 semble tout arrêter. Je pourrais poster le code pour ma petite fonction appelée BuildFormData() si utile.
EDIT: gestionnaire révisé comme suit (n'a eu aucun effet, même erreur se produit):
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 });
}
}
Merci. Votre point de vue semble valable, mais pouvez-vous en dire plus sur les raisons pour lesquelles je ne m'arrête même pas sur la ligne que vous montrez. C'est pourquoi le 401 se produit et comment je pourrais régler cela. Je vais m'inquiéter du retour au POSTER plus tard. –
Que se passe-t-il lorsque vous supprimez context.Response.Redirect (msgReturn.ToString()) ;? – Keltex
S'il vous plaît voir mon EDIT sur la question où je montre mon ProcessRequest révisé() dans le fichier .ashx ..... trace.axd montre la même erreur 401 survenant cependant si cela ne semble pas d'importance jusqu'à présent. –