[.net] downloads van bestanden loggen

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
Situatie:
Er draait een bepaalde website, geschreven in asp.net. Deze site gebruikt forms authentication en een soort html template engine. Concreter gezegd bevat de pagina een literal control waarin afhankelijk van een aantal variabelen een bepaalde html file weergegeven wordt.

Probleem:
Sommige html files bevatten links naar bestanden die door klanten gedownload kunnen worden. Graag willen we bijhouden welke klant een bepaald bestand download, en wanneer. Maar omdat de links eigenlijk gewoon html zijn, valt dit niet in .net af te vangen (toch?). Ik heb ook al in het IIS log zitten spitten maar daar staan niet alle gegevens in die we nodig hebben.

Ik zit me hier al de hele dag het hoofd over te breken hoe dit op te lossen. De search en google leveren niet de juiste resultaten op. Ik hoop op een briljant idee van een medetweaker...

Roomba E5 te koop


  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Gegevens over bestanden die je via statische HTML bereikt zijn afaik idd niet via een .NET-geintje te benaderen.

Je hebt imo twee opties:
(1) Webserver africhten zodat je wel de juiste info terugkrijgt (van Apache weet ik dat je d'r genoeg uit kan persen, geen ervaring met IIS - welke data heb je nodig?).
(2) HTML-bestanden vervangen door iets asp'erigs.

Optie 1 heeft de voorkeur omdat de webserver weet hoeveel bytes hij heeft verstuurd, zo kan je dus ook controleren of iemand een bestand wel helemaal heeft gedowned.

HTH :)


Journalism is printing what someone else does not want printed; everything else is public relations.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je zou idd een HttpModule kunnen maken die de bestanden doorstuurd. Dan kan je in de handler ook ergens wegschrijven welke user de bestanden heeft gedownload.

Het is volgens mij niet mogelijk om gegevens over je forms authentication in je IIS logs te krijgen dus dan is het volgens mij niet mogenlijk om de gebruiker aan een gedownload bestand te koppelen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
in de iis logs krijg ik inderdaad geen gegevens over de ingelogde user.
ik heb nodig:
-username
-datum/tijd
-bestand

Dacht net dat ik het had overigens, ik had ff een breakpoint in m'n global.asx.cs gezet op Application_BeginRequest, die wordt bij elke request getriggerd. Alleen niet bij te downloaden bestanden helaas...

Roomba E5 te koop


Verwijderd

omdat die event alleen optreed voor files die geserveerd worden door ASP.NET, en file downloads gaan direct door IIS en niet door de ASP.NET engine.

Wat wel de juiste oplossing is weet ik niet precies, je zou via een redirect page gegevens in een db kunnen opnemen over wie welke file download dus de download pagina geef je een ID mee waarna het bestand wordt aangeboden.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Application_BeginRequest wordt inderdaad alleen uigevoerd voor bestanden die door de asp.net ISAPI heen gaan.

Ik zou gewoon een HttpHandler maken ( .ashx ) die als parameter het bestand meekrijgt wat gedownload moet worden en deze dan gewoon met Response.WriteFile doorstuurd. Je kan dan zelf een log wegschrijven met alle gegevens die je wilt hebben.

[ Voor 9% gewijzigd door Woy op 12-01-2005 14:00 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Rataplan schreef op woensdag 12 januari 2005 @ 12:49:
Gegevens over bestanden die je via statische HTML bereikt zijn afaik idd niet via een .NET-geintje te benaderen.
Je kan toch HTTP module voor IIS schrijven?

[ Voor 45% gewijzigd door Verwijderd op 12-01-2005 14:01 ]


Verwijderd

bedoel je een ISAPI module? Ik denk dan persoonlijk dat een httpmodule een STUK makkelijker is.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
rwb schreef op woensdag 12 januari 2005 @ 13:59:
Ik zou gewoon een HttpHandler maken ( .ashx ) die als parameter het bestand meekrijgt wat gedownload moet worden en deze dan gewoon met Response.WriteFile doorstuurd. Je kan dan zelf een log wegschrijven met alle gegevens die je wilt hebben.
Dit klinkt erg interessant. Waar kan ik hier meer over vinden?
Verwijderd schreef op woensdag 12 januari 2005 @ 14:16:
bedoel je een ISAPI module? Ik denk dan persoonlijk dat een httpmodule een STUK makkelijker is.
En dit ook. Als ik op beide zoek in de visual studio help komt er echter erg weinig info bovendrijven.

Edit: heb inmiddels al wat gevonden, maar meer info is altijd welkom!

[ Voor 5% gewijzigd door sig69 op 12-01-2005 14:27 ]

Roomba E5 te koop


Verwijderd

ik bedoelde eigenlijk ook de HttpHandler, aangezien deze gewoon onder .NET valt, ISAPI modules zijn een hell, en je moet toegang tot IIS ervoor hebben, oftwel ga voor de handler en daar is genoeg informatie over te vinden.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
zoek eens in de msdn op IHttpHandler. Daar staat het vast allemaal uitgelegd. Je kan zelf een class maken en die via de web.config registreren of je kan gebruik maken van een .ashx file waar een class inzit die IHttpHandler implementeerd.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Misschien begrijp ik hem verkeerd, maar kan je niet gewoon linken naar een download.aspx en dan de username en file meesturen:

http://www.blaat.com/down...sername&fileName=iets.exe
Dan kan je er een hele code achter hangen .....

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 12 januari 2005 @ 15:12:
Misschien begrijp ik hem verkeerd, maar kan je niet gewoon linken naar een download.aspx en dan de username en file meesturen:

http://www.blaat.com/down...sername&fileName=iets.exe
Dan kan je er een hele code achter hangen .....
Dat is dus ook wat ik zeg. Alleen link je dan niet naar een download.aspx maar naar een download.ashx. ( Daar kan je een IHttpHandler in zetten. Dan heb je veel meer controle over wat je terug wilt sturen ).

En bovendien hoef je de username er niet in de link te zetten want die kan je ook gewoon aan je omgeving opvragen. Je moet tenslotte ingelogd zijn om de ashx op te kunnen vragen. Anders kunnen mensen nog steeds gewoon zelf de link veranderen en klopt je systeem nog steeds niet.

[ Voor 21% gewijzigd door Woy op 12-01-2005 15:17 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
Verwijderd schreef op woensdag 12 januari 2005 @ 15:12:
Misschien begrijp ik hem verkeerd, maar kan je niet gewoon linken naar een download.aspx en dan de username en file meesturen:

http://www.blaat.com/down...sername&fileName=iets.exe
Dan kan je er een hele code achter hangen .....
De mensen die de html files maken zijn absoluut noob. Zij moeten gewoon in word, frontpage of whatever kunnen zeggen: insert hyperlink -> naar dit en dit bestand en klaar.

Edit: ben nu met een httphandler an het prutsen en dat gaat best lekker. 1 ding alleen:
Ik heb nu dit in m'n web.config:
code:
1
2
3
<httpHandlers>
    <add verb="*" path="*.exe" type="WebTestApp.HelloWorldHandler,WebTestApp" />
</httpHandlers>
Hoe kan ik "path" nu anpassen dat hij alleen .exe's in de root van m'n site pakt?

[ Voor 25% gewijzigd door sig69 op 12-01-2005 17:03 ]

Roomba E5 te koop


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
ik denk iets van path="~/*.exe" maar dat weet ik niet zeker. Maar weet je zeker dat zo ook de exe files door je handler opgevangen worden? Standaard is dat volgens mij niet zo, of je moet in IIS ook instellen dat .exe files ook door de ASP.NET ISAPI afgehandeld worden.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

ik weet niet of het je al is gelukt maar ik zou wel graag je oplossing willen zien. Want ik vind het persoonlijk vreemd als IIS requests voor .exe files doorgooit naar asp.net als je dit niet heb aangegeven.

Ik zoek zelf momenteel ook een oplossing voor dit probleem maar ik heb geen toegang to IIS dus dit zal voor mij niet werken.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
Ik heb inderdaad IIS downloads via de ASP.NET ISAPI laten afhandelen, ik heb gelukkig toegang tot de server. (Wel vreemd dat dit niet in de help genoemd wordt, ben het in ieder geval niet tegengekomen)

path="~/*.exe" werkt overigens niet helaas

[ Voor 27% gewijzigd door sig69 op 13-01-2005 11:03 ]

Roomba E5 te koop


Verwijderd

het is gewoon kennis van IIS en hoe dit samen met .NET werkt, als je overigens een artikel over HttpHandlers pakt staat er meestal wel een note bij over het forwarden van de requests. Ik heb overigens zelf een oplossing bedacht voor het downloaden, dit in combinatie met url rewriting.


mijndomain.com/files/4329/download.aspx waarbij 4329 dus een ID in me database is en waarbij ik dus direct ook de rechten kan controleren. Ook heb ik hier toegang tot mijn IPrincipal.

  • Shir
  • Registratie: November 2000
  • Laatst online: 25-11-2025
Misschien een beetje offtopic, maar wel interessant:
Using ASP.NET HTTP Handlers to create a photo album

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 19:03
Zeker interessant ja, *bookmarked

Roomba E5 te koop

Pagina: 1