2012-03-15 5 views
6

Ho la seguente, a mio avviso rasoio per un editor di modelli nel mio modulo Orchard:Orchard CMS: file JavaScript restituisce 404 non trovato, anche se esiste

Script.Include("assets.js").AtFoot(); 

Quando la pagina viene visualizzata posso vedere questa linea nella parte inferiore:

<script src="/Modules/MyModuleName/scripts/assets.js" type="text/javascript"></script> 

Bello! L'unico problema è che quando visito quel percorso ottengo un errore 404. Lo script non esiste.

... ma lo fa! È salvato come Orchard.Web\Modules\MyModuleName\Scripts\assets.js

Il resto delle funzionalità del mio modulo funziona correttamente: posso abilitarlo e usarlo, non troverà il file di script. Mi sto perdendo qualcosa di ovvio qui ?!

+0

Presumo che la maiuscola/Scripts/vs./scripts/non sia il problema? – AlexMA

+0

Ciao @Alex, provalo con entrambi :( – greg84

+1

Hai un web.config nella cartella degli script con le giuste autorizzazioni? – forsvarir

risposta

8

Per impostazione predefinita, Orchard è configurato per limitare i permessi della cartella. Di solito questo è sovrascritto aggiungendo un web.config a ciascuna cartella come richiesto (in questo caso, la cartella degli script).

Se si utilizza il modulo codegen per generare il modulo, questo viene fatto come parte della generazione. In caso contrario, è necessario aggiungere personalmente il web.config.

Il web.config codegenned assomiglia a questo:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <appSettings> 
    <add key="webpages:Enabled" value="false" /> 
    </appSettings> 
    <system.web> 
    <httpHandlers> 
     <!-- iis6 - for any request in this location, return via managed static file handler --> 
     <add path="*" verb="*" type="System.Web.StaticFileHandler" /> 
    </httpHandlers> 
    </system.web> 
    <system.webServer> 
    <staticContent> 
     <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> 
    </staticContent> 

    <handlers accessPolicy="Script,Read"> 
     <!-- 
     iis7 - for any request to a file exists on disk, return it via native http module. 
     accessPolicy 'Script' is to allow for a managed 404 page. 
     --> 
     <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" /> 
    </handlers> 
    </system.webServer> 
</configuration> 
+1

Grazie - works ora :) Originariamente ho creato il modulo usando lo strumento gen gen, ma ho eliminato la cartella scripts. Quando l'ho ricreato, ovviamente il file di configurazione era sparito. Doh! – greg84

2

ho trovato un altro motivo per questo 404 che vorrei menzionare. UrlScan per default rifiuta un punto nel percorso, ho trovato questo nel mio ceppo: URL Respinto + contiene + punto + a + percorso

Quindi modificare l'impostazione in:

AllowDotInPath=1 

e funziona di nuovo. Mi ci è voluto un po 'di tempo per trovarlo, perché non uso mai un punto nel percorso ...