HttpHandlers / Modules :: Implement Custom HttpContext For Each Request Under Class That Implements IHTTPHandler?
Aug 10, 2010
I created an application and implemented IHTTPHandler for all incoming request ending with ".aspx" extension.Under "ProcessRequest" module, I am creating an instance of HttpContext (with URL attributes different from my application's URL i.e. if I am working on localhost then speciying Yahoo.com as its URL) and assigning it to "context" which comes as method argument.After redirection, an error is generated. Also, the custom HTTPContext is not passed to the requested page (default.aspx, in my case.)Code is as follows.
I'm in a situation where a GET request is made of my server without any content-length header. After the GET request is sent the client then sends a small chunk of data (8 bytes to be exact). It's imperative to note that this data is not meant to be treated as a request body. For this reason asp.net/iis ignores it. I cannot read it and the input stream says it has a length of 0. This is the correct behaviour!
What I need to do is somehow hook into the request processing pipeline early enough to read this data and somehow append it to the request (Items?) I don't know how to do this 'correctly'. I figure I should probably create an IHttpModule to check if the request is of the type that will have this data, then somehow read it.
How would I go about this? How would I be able to read this information in from the stream? I've tried adding an event handler to HttpApplication.BeginRequest but everything I try to read the stream fails. I've read that I could potentially add a custom header using reflection (this would allow me to add a content-length header) but this feels nasty and hacky - I presume there's just a place where I can hook in and handle the reading of the stream before passing it on for further processing.
Using a Windows application I am sending a web request to a web page and getting the response back using the following code
HttpWebRequest oRequest1 = (HttpWebRequest)WebRequest.Create(url); oRequest1.ContentType = "text/xml"; using (Stream stream = oRequest1.GetRequestStream()) { stream.Write(fileBytes1, 0, fileBytes2.Length); //fileBytes1 - contains the data of first request } HttpWebResponse Response1 = (HttpWebResponse)oRequest1.GetResponse(); ->The above code works fine But I need to enhance the code to accomodate following additional scenario ->Send another request to the same web app and ->get the response back
The first request sent contains the credentials to access the web application the second request sent doesn't have credentials, it must use the credentials of first request. I am using the same (following) code for the second request too. I get an error saying that it's looking for credentials
I want to create my own HttpApplication class, wherein I can handle methods like ExecuteStep. let me know if there are any examples to do this. Kindly provide some pointers to this...
I am using VS 2008. Basically I want to handle all events from httpApplication class (even before global.asax) before it reaches web pages inside Do other classes come into picture if I want to create my own HttpApplication class .
I am trying to call a webservice that requires me to authenticate and then pass the session id returned from the authenticate method to subsequent web service calls. The session id has to be passed as HTTP request header. So I tried using the following code to add the session id to a HTTP request header:
System.Collections.Specialized.NameValueCollection headers = HttpContext.Current.Request.Headers; Type t = headers.GetType(); //get the property System.Reflection.PropertyInfo p = t.GetProperty("IsReadOnly",System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.IgnoreCase | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.FlattenHierarchy); //unset readonly p.SetValue(headers, false, null); //add a header headers.Add("Cookie", "SID=" + sessionId );
The header is supposed to be called "Cookie" and the SID contains the session id. The problem is the last line in the code above gives an exception saying "Operation is not supported on this platform". I am running this code on my dev machine with with Windows XP Professional Service Pack 3 and IIS 5.1. I haven't been able to find any solution to this problem after days of searching. I also tried to deploy my web app on IIS directly but had the same error.
I am using Webhandler to upload images to the server. I want to send the folder name so on that folder the images will save. I am using this URI format and got the below error.
Also I added the following line in the web.config but still having the issue.
<httpRuntime requestValidationMode="2.0" />
A potentially dangerous Request.Path value was detected from the client (?). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: A potentially dangerous Request.Path value was detected from the client (?).
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace: [HttpException (0x80004005): A potentially dangerous Request.Path value was detected from the client (?).] System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +8884233 System.Web.ValidateRequestExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +35 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
Version
Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
I am doing some redirecting of old url in global.asax's application_beginrequest. Redirecting works fine when getting the url's using an http get but not when using an http head request.
I have a very simple query. I have added custom header to my website. Now I want to read the custom header. I am using IIS 6.0 on windows XP. I have already tried using using the Request.ServerVariables and and Request.header method. But none of them give me the custom header added to website.
I'm trying to secure my web application so XML files it contains can't be downloaded. I thought it would be as simple as adding these to the "httpHandlers" section of web.config:
This failed - the XML files could still be downloaded easily. I tried different browsers in case they were caching, but everything could download the XML files without any trouble. I thought this might be due to some special handling of XML, so I tried mocking up an alternative based on ".txt123" files. I added this file with some dummy content:
We have a handler to deal with .dat files.. everything is already setup and server is acknowledging the file type and doing its thing to handle it..
But the handler requires 1 bit of information along with the HTTP request which is a physical file path.. the file name it knows based on the file we call , but how can i pass a custom header along with the request so that the handler will use that when the request is made?
Basically when on our player.aspx page, i will have a button, when you click that button a request is made to the .dat file, but along with that request i need to send the physical file path.. how can i do that?
i have a custom handler which captures user's book mark entry. To debug this handler, i have created a file "test1.txt" in code behind which saves the user entry. After the debug, i removed the text file (test1.txt) then re-complied the web app and deployed new DLLs for the site. But, the site is still looking for test1.txt file. i dont know how to confirm if the handler is really removed from the new DLL. Also, looked at the handler code behind file and didn't find any entry with test1.txt. So,
I am writing a custom HTTP module to implement user authentication and appropriate access rights. And for identifying access rights for the user also depends on identifying the client's machine details like IP address, machine name, etc. The access rights will depend based on from which location or machine the user is trying to login.
Can we get these details from the HttpApplication or HttpContext object?
As im new to this concept,i request anyone to explain in detail about configuring the custom handlers in IIS 5.1 STEP by STEP and also about mapping the extension.
I'm using HttpModule to capture requests to the web server. Before processing the page I'd like to check the values contained in some keys of the Request.Form collection and according to some logic change if necessary. I'd like to do this when BeginRequest event is fired. The problem is that the Request.Form collection is readonly.
I have various web pages that need to build up a URL to display or place it in an emitted email message. The code I inherited had this value for the name of the webserver in a Public Const in a Public Class called FixedConstants. For example:
Public Const cdServerName As String = "WEBSERVERNAME"
Trying to improve on this, I wrote this:
Public Class UIFunction Public Shared myhttpcontext As HttpContext Public Shared Function cdWebServer() As String Dim s As New StringBuilder("http://") Dim h As String h = String.Empty Try h = Current.Request.ServerVariables("REMOTE_HOST").ToString() Catch ex As Exception Dim m As String m = ex.Message.ToString() 'Ignore this should-not-occur thingy End Try If h = String.Empty Then h = "SomeWebServer" End If s.Append(h) s.Append("/") Return s.ToString() End Function
I've tried different things while debugging such as HttpContext.Current.Request.UserHostName and I always get an empty string which pumps out my default string "SomeWebServer". I know Request.UserHostName or Request.ServerVariables("REMOTE_HOST") works when invoked from a page but why does this return empty when invoked from a called method of a class file (i.e. UIFunction.vb)?
When I have a HttpHandler class in C#/ASP.NET mapped to a file extension in IIS any file with that extension fails to download/display in web browsers (it's downloaded as a 0-byte file in some browsers and nothing at all in other browsers). After removing the application mapping for the HttpHandler in IIS so it doesn't call the IHttpHandler class in C#, the web browser downloads the file successfully.
This was tested with an IHttpHandler class in C# that has an empty ProcessRequest method.
i redirect a page from http to https using http module begin request handler .i am calling webservice using ajax but it is saying webserice not defined .which otherwise works fineits work fine when rediect page in page_load instead .but i need to add function for https to http in every page. i still not know why ajax is not working when i use http module for redirect
I built a base controller class inherits from Controller class to add some custom behavior to all controllers which will inherit from this base class.
My issue is when I try to access HTTPContext and Session objects in my custom base class, they are always null.
Am I doing something wrong or need missing something?
My custom base class definition:
public class ApplicationControllerBase : Controller
controllers classes definition:
public class HomeController : ApplicationControllerBase
using ASP.NET MVC 1, .NET 3.5.
UPDATE:
It seems the issue is I try to access HTTPContext in the constructor while HTTPContext is not ready yet, I tried it in the OnActionExecuted event handler and it works fine.
My question is what is the best place to access Session object in my custom controller class, that will guarantee executing my code with all controllers.
We're migrating an application to use IIS7 integrated mode. In library code that is designed to work either within the context of an HTTP request or not, we commonly have code like this:
if (HttpContext.Current != null && HttpContext.Current.Request != null) { // do something with HttpContext.Current.Request } else { // do equivalent thing without HttpContext.. }
But in IIS7 integrated mode the check for HttpContext.Current.Request throws an exception whenever this code is called from Application_Start.
System.Web.HttpException: Request is not available in this context
How can I detect whether the request is really available without wrapping these calls in an exception handler and taking action based on whether an exception is generated or not.
Looking at HttpContext in Reflector I see it has an internal bool HideRequestResponse field but it's internal so I can only get to it with reflection and that's fragile. Is there a more official/approved way to determine if it's ok to call HttpContext.Request?
This blog post about the subject says not to use HttpContext, but how, in generic library code, can you determine if it's ok to use HttpContext?
I'm using the work-around mentioned there which is to use Application_BeginRequest and an initialized field to only initialize once as part of BeginRequest, but that has to be done in every calling application whereas I'd prefer to make the library code more robust and handle this situation regardless of where it's called from.