C# - Test For Default Document Request?
Jan 30, 2010Is there a way to programmatically know when someone is using the Default Document feature of IIS to access my page (that is, the name of my .ASPX isn't in their URL anywhere)?
View 2 RepliesIs there a way to programmatically know when someone is using the Default Document feature of IIS to access my page (that is, the name of my .ASPX isn't in their URL anywhere)?
View 2 RepliesI am trying to secure very mixed content that is located in an ASP.NET directory. For purposes of this question, it can be ~/MyApp/.
I want all of the content in the directory and its subdirectories restricted to authenticated users. The default.aspx page, though, should be accessible to everyone. This is the web.config in that directory:
[Code]....
Now if you are an unauthenticated user, everything works fine if you request [code]....
The problem occurs in that visitors do not always request "Default.aspx". We have a default document configured so that they get Default.aspx even if they just request "/MyApp". An authenticated user works fine, but an unauthenticated user is directed to the login page.
Now I know that essentially this happens because even though the request for "/MyApp/" will actually end up serving up "/MyApp/Default.aspx", the security system is only checking for "/MyApp/" since that is what I requested. That is then getting the default security for the directory.
How can you configure an exception to allow access when no particular file is requested in the directory??
Is there some dependency between DefaultDocumentModule and UrlAuthorizationModule? In this environment, the UrlAuthorizationModule has been removed and re-added in order to make sure it fires for non-managed requests. I would not expect that to change the order of execution, though, since UrlAuthorizationModule usually goes after DefaultDocument.
A workaround could be to set up the opposite security with the directory being open, and then trying to secure individual files. Because of the (changing) number of files, and extensions, etc, and the fact that you cannot use wildcards in a <location>, this is not really a workable solution for me.
I created a little web service to minify JavaScript, and everything was nice, with all my tests passing. Then I noticed a bug: if I tried to minify alert('<script>');, it would throw a HttpRequestValidationException.
So that's easy enough to fix. I'll just add [AllowHtml] to my controller. But what would be a good way to unit test that this doesn't happen in the future?
The following was my first thought:
[TestMethod]
public void Minify_DoesntChokeOnHtml()
{
try
{
using (var controller = ServiceLocator.Current.GetInstance<MinifyController>())
{
return controller.Minify("alert('<script></script>');");
}
}
catch (HttpRequestValidationException)
{
Assert.Fail("Request validation prevented HTML from existing inside the JavaScript.");
}
}
However, this doesn't work since I am just getting a controller instance and running methods on it, instead of firing up the whole ASP.NET pipeline.
What would be a good unit test for this? Maybe reflector on the controller method to see if the [AllowHtml] attribute is present? That seems very structural, and unlikely to survive a refactoring; something functional might make more sense.
'm trying to host a new web site on a company called M6.Net and I can't find the setting for default document. Anybody use this company?
View 8 RepliesHow can i set different default document for each folder in my asp.net project.I have set a default document from IIS, but that doesn't show up for every folder browsed.I have already added HTMLs to the collection but they are not showing up, instead stander ed Forbidden error page shows up.
View 2 RepliesI've got an Asp.net site set up on GoDaddy which is using UrlRewriter.net (not to be confused with UrlRewriting.net) to enable url rewriting which seems to be working ok, though I had to set IIS to run in IIS6 mode, rather than IIS7. The problem I have is that my default document is 'virtual' so while it's possible to browse to mydomain.com/default.aspx just going to mydomain.com/ doesn't work - I presume this is because IIS is expecting default.aspx to actually exist within the root directory of the website. Is there any way around this problem?EditAs requested, here is the rewrite rule from my web.config file.
<rewriter>
<rewrite url="^(/.+(.gif|.png|.jpg|.ico|.pdf|.css|.js)(?.+)?)$" to="$1" processing="stop" />
<unless url="~/Login.aspx|~/Page-Not-Found.aspx|~/ShowPage.aspx">
<rewrite url="^~/(.+).aspx" to="/ShowPage.aspx?PageName=$1" />
</unless>
</rewriter>
IIS6, ASP.NET 2.0, No Forms Authentication I'm calling Response.Redirect("~/foo.aspx"), but the default document ("Default.aspx") for my site is appearing. To make matters worse, it only happens intermittently. Sometimes the redirect displays the right page.
I've checked session state, and I don't see any values in the web.config (that is, I'm assuming I'm using the 20-minute defaults).
There's foo.aspx and foo2.aspx (and the default document, Default.aspx). All pages extend from BasePage, which extends Page.
BasePage has a property named ReturnPage:
protected string ReturnPage {
get {
if (Session["ReturnPage"] == null) {
Session["ReturnPage"] = "";
}
return Session["ReturnPage"].ToString();
}
set { Session["ReturnPage"] = value; }
}
Users click on a LinkButton on foo.aspx, and the click event handler ends with two lines of code:
ReturnPage = ResolveUrl("~/foo.aspx");
Response.Redirect(ResolveUrl("~/foo2.aspx"));
The Page_Load of foo2.aspx has problems, and its error handling calls Response.Redirect(ReturnPage).
When I view the response headers of foo2.aspx, the 302 location is string.Empty (that is, there isn't one). That same response header has the same ASP.NET Session ID as the response of foo.aspx.
And remember -- this is intermittent. Sometimes, you can click on that LinkButton and go effortlessly to foo2.aspx, no problem. You can process the click with the exact same data once, and it will fail. You'll navigate from the default document (Default.aspx, where you were sent by the "bug") back to foo.aspx, click again with the same data (the same row in the grid/table -- the same LinkButton, essentially), and you'll be redirected to foo2.aspx without issue.
My login.aspx is in a Login folder of my website. I want this to be the default document of my website in IIS. is this possible? or should I create a home.aspx page that redirects to login.aspx?
View 4 RepliesI have an ASP.NET web site project, which I'm publishing to IIS on my Win2k8 R2 server. It has a default page called login.aspx. I set that up on the published web site.
Trouble is, every time I publish a new version of the web site, the login.aspx entry gets erased from the "Default Document" settings of the web site in IIS. This is very annoying. How can I publish my web site from Visual Studio without wiping out the default page every time?
I basically have quite a large site collection with various site and sub sites that all contain their own document libraries. I need to change the default view of each document library to include the following fields:
Checked out to.
Check in comments.
This is ok as I have written an app that will loop through all existing lists and do this however is there a way I can change the template for a document library so that any future lists that are created will automatically contain these two fields in the their default view?
I am using WSS 3.0.
I have spent a day and a half trying to resolve this issue. Bascially have an ASP.net website with Forms Authentication on IIS7 using Framework 4.0.
The Authorization stuff seems to be working perfectly for every scenario with the exception of hitting it with no document specifed (Should resolve to Default Doc).
For example [URL] works perfectly, this page should allow anon access as specified in the web.config.
but if I hit [URL] Directly it redirects to the login page with Return URL set to "/" or Login.aspx?ReturnUrl=%2f
Some things I have tried:
1) Set Authentication to None and then the Default document worked so thats not the issue.
2) Added DefaultDocument attribute to Web.config
3) Deleted all entries for in Default Document list in IIS except for Default.aspx
4) Added MachineKey entry in Config
5) Toggled from Integrated to Classic pipeline in IIS
Here is what's in my config:
[code]...
I have two strange problems when I use routing in a web form application. Environment: IIS 7.5; .NET 4.0 and Windows 7 64 bit.
default document does not work if I use (http://www.)mydomain.com. The exception message is "The controller for path '/' was not found or does not implement IController". However, if I debug in VS 2010 (http://localhost:8080), this problem has never come out. Here mydomain.com and http://localhost:8080 hit the same code in the same folder of the same computer. I trapped the value of request.path. When local host is used, the value is "default.aspx" while "/" if mydomain.com is accessed. I can use one line (if "/" then redirect to default.aspx) to "fix" the problem but I believe it should have a better way. when I detect request.path, I got such a VERY strange request which I have never seen before: 192.168.1.11/StableWSDiscoveryEndpoint/schemas-xmlsoap-org_ws_2005_04_discovery! I have no idea where it is from. I do not use any web service in my code. The request is posted to the server, and the user agent is WSDAPI. I tried to debug the code from a different browsers other than IE. It looks like I do not get such a request. Edit: I just found the 192.168.1.11/StableWSDiscoveryEndpoint/schemas-xmlsoap-org_ws_2005_04_discovery request is sent from the domain control.
I have an ASP.NET website application, and there is a home page for my web site. I need to be able to change the default document of my website programmatically (C#) so that I can make another web page take priority above the one that already exists. I would then like to revert back to the previous default document order.
Example :
I have two home pages - Home1.aspx and Home2.aspx. In the IIS default document settings I have added the two pages and made Home1.aspx be the first default document then Home2.aspx the second. I need in some cases to be able to change the order of the two default documents so that Home2.aspx is the first default document then Home1.aspx the second.
How can I do that from my C# code?
I have one asp application. When i deploy this application in iis like www.xxxx.com , my index page is in the sub folder like root/home/index.asp , so when i set this as default document , browser will redirect to this url. But without redirection is this possible to load the default document in www.xxxx.com
I need my default document while browsing www.xxxx.com without redirecting to www.xxxx.com/home/index.asp
What shoud i do to achieve this?
I have IIS 7.5 with an ASP.NET application. The application must run with IIS Classic Mode.
I have one HttpHandler that serves all the Request:
<httpHandlers>
<add verb="*" path="*.aspx" type=".....HandlerFactory..." />
</httpHandlers>
The problem is that i can't establish a Default Document to an non phyisical file. I want that the Default Page be : Home.aspx (which is a non phyisical file).
So when I go: [URL] I get an error: HTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this directory.
I do not want to make a REDIRECT.
Is there any way to accomplish this without having to create a index.html to redirect to Home.aspx?
if there is a way to determine if the default document has been served using .net? I thought perhaps something would be available in the server variables, but I can't seem to find anything that distinguishes between [URL] and [URL]
View 3 RepliesI created the simplest MVC project with Visual Studio 10, and it works fine on the VS Development Server, but won't run using IIS on the same computer under IIS (Windows Server 2008 R2 with ASP.NET 4.0.30319).
My steps were:
File / New / Project ...Visual C# / Web / ASP.NET MVC 2 Web Application... and kept the default name: MvcApplication1
Clicked Debug to build and run ... the default page appears fine at http://localhost:49175 ...
Then I closed that browser and clicked on MvcApplication1 / Properties / Web and selected "Use Local IIS Web server"Clicked "Create" to create the virtual directory at http://localhost/MvcApplication1
Clicked Debug again... and got HTTP Error 403.14 (Web Server configured to not list directory)
It seems that IIS cannot find a Default document. If I add a document to the virtual directory (C:inetpubwwwrootMvcApplication1) with one of the default doc names, that document will display OK.
Why can ASP.NET find the default document (Views/Home/Index.aspx) when running from the VS Development Server, but not when running from IIS??
I have tried running "aspnet_regiis -i", but still find that C:inetpubwwwrootaspnet_clientsystem_web4_0_30319 is an empty folder. Should there be something here?I have tried giving all sorts of permissions to the virtual directory folder (C:inetpubwwwrootMvcApplication1) but without any success.
I want to know if there is a way to set up the default document or default web page from the setup project of a web page.What I mean is that I would like my web app installer to set the default page (i.e: DefaultPage.aspx) when installing the web application. I remember I could do this in previous versions of the asp.net platform, currently I am working in ASP.NET 3.5 (Visual Studio 2008).
View 2 RepliesI would like to create the XML string on the the aspx page and then submit this request using the YUI ajax request to another aspx page for the processiong. So
1. is this possible by setting some of the ajax requests configurations like we do on ajax response ?
2. How it can be done ?
i am trying to remove default.aspx from any request that might have it.
protected void Application_BeginRequest(object sender, EventArgs e)
HttpContext context = HttpContext.Current;
string url = context.Request.Url.ToString();
// remove default.aspx
if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase))
[code]...
I'm developing a pretty standard MVC application.. I've set the routing up as follows:
[Code]....
Everything works perfectly in all browsers - apart from IE. If I am on, say, Stock/Index/, it will fire the Stock/Index/ GET request, then fire the Stock/NewLines/ request afterwards..Obviously this isn't desired behaivour - as I understand it, the default route value is for when the router can't find the requested controller/action/route, and so sends the request there..Can't seem to find any info on the web about this,
I have a following issue (it's only happening in Internet Explorer).
I add callback to a page in the old-fashioned way -> Page.ClientScript.RegisterClientScriptBlock(...)
The scenario is: 1) The default page is being loaded. On Page_OnLoad it assigns a NULL to some session key. Let's call it Control -> Session["Control"] = null;
2) User presses a button and gets redirected to a next page (let's call it NextPage.aspx) using javascript event -> window.location.assign(....) (also tried .href = ... - no help)
3) The NextPage.aspx assigns some value to Session["Control"] on Page_OnLoad
5) User clicks a button on the NextPage.aspx and a callback request is being sent to a server....
TA DA!!! The interesting part:
6) Along with the request to the NextPage.aspx another request is being sent to the default page.
7) The only response is being recieved by a client is a response from the NextPage.aspx BUT since the code on the default page is being executed it puts null to the Session["Control"] which screws all my following scenario. the default page doesn't recognize the request as a callback? so if(IsCallback) {} doesn't help....
I believe it's not a code issue since as I wrote above it works in development environment,but I have no clue what can 'cause it to fail in production and only in IE...
At least what to start to look at... and I have Helicon's ISAPI Rewrite installed on the production server. It doesn't seem to be the cause but who knows....
Correction
if I do not assign window.location and just add a link to the NextPage.aspx and click it manualy after callback ended it still sends extra request to the default page. if I click the link before I initialize callback it works fine without extra request.
In my asp.net 3.5 web site i have default.html page defined as first default document in iis 6 web site configuration window. I have URL rewriting module written and when the request for default.htm comes its pointed to default.aspx page.
View 1 Repliesi have to do some message exchange with a 3rd party (in a website).When the client posts a page, i start the message exchange. When that doesn't succeed for some reason, i report this to the client by rendering the page with a message.On the background, in a separate thread, i start a process to send abort messages to the 3rd party. I can't do this while the user is waiting for the page to come back, because it might take a few minutes.But in a test project, the test ends when the message to the 3rd party is sent, and after the new thread is started. But it seems that the new thread also ends, when the test is done.
Is that normal behaviour?I do start the thread in a new class with a reference to 2 objects from the class which tries to send the message in the first place, may that be a problem?EDIT: it keeps running when the whole process is started in IIS
How can you request the root default.aspx without specifying it in the url for your root application?e.g. ttp://localhost/MyApp/ instead of http://localhost/MyApp/Default.aspxshould be able to do bothI'm not sure if this is a setting in IIS 7.5 for the application or what.
View 3 Replies