views:

346

answers:

1

We have a website build in the umbraco 4.1 cms (webforms) default .net 3.5 And we have some MVC tools and controls build with MVC2.0 on .net 4.0

i've managed to let the umbraco cms run in .net 4.0 and i've been following parts of this guide (for mvc 1.0 and umbraco 4.0.3)

but now i'm stuck, umbraco has alot of url management itself, so i use the urlRewriting.net (included in umbraco) to redirect a certain url, to http://domain/umbraco/mvc.ashx?mvcRoute=/home.aspx/index for example.

i know the url rewriting works (if i force an error into the mvc.ashx i recieve it in the browser window. but each time it gets to the ProcessRequest it throws a "resource not found" error to the screen

here is the full code for mvc.ashx that i use

<%@ WebHandler Language="C#" Class="mvc" %>
using System.Web;
using System.Web.Mvc;

public class mvc : IHttpHandler
{
    public void ProcessRequest(HttpContext httpContext)
    {
        string originalPath = httpContext.Request.Path;
        string newPath = httpContext.Request.QueryString["mvcRoute"];
        if (string.IsNullOrEmpty(newPath))
            newPath = "/";

        HttpContext.Current.RewritePath(newPath, false);
  IHttpHandler ihh = (IHttpHandler)(new MvcHttpHandler());
  ihh.ProcessRequest(HttpContext.Current);
        HttpContext.Current.RewritePath(originalPath, false);
    }
    public bool IsReusable
    {
        get { return false; }
    }
}

here is the web.config that i use

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
        <section name="microsoft.scripting" type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting, Version=0.9.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <section name="umbraco.presentation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
        <section name="clientDependency" type="ClientDependency.Core.Config.ClientDependencySection, ClientDependency.Core"/>
        <section name="UmbracoExamine" type="UmbracoExamine.Core.Config.UmbracoExamineSettings, UmbracoExamine.Core"/>
        <section name="ExamineLuceneIndexSets" type="UmbracoExamine.Providers.Config.ExamineLuceneIndexes, UmbracoExamine.Providers"/>
    </configSections>
    <urlrewritingnet configSource="config\UrlRewriting.config" />
    <microsoft.scripting configSource="config\scripting.config" />
    <clientDependency configSource="config\ClientDependency.config" />
    <UmbracoExamine configSource="config\ExamineSettings.config" />
    <ExamineLuceneIndexSets configSource="config\ExamineIndex.config" />
    <appSettings>
        <add key="umbracoDbDSN" value="server=sander_pc\SQLEXPRESS;database=database;user id=username;password=password" />
        <add key="umbracoConfigurationStatus" value="4.1.0.betaII" />
        <add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx" />
        <add key="umbracoReservedPaths" value="~/umbraco,~/install/" />
        <add key="umbracoContentXML" value="~/data/umbraco.config" />
        <add key="umbracoStorageDirectory" value="~/data" />
        <add key="umbracoPath" value="~/umbraco" />
        <add key="umbracoEnableStat" value="false" />
        <add key="umbracoHideTopLevelNodeFromPath" value="true" />
        <add key="umbracoEditXhtmlMode" value="true" />
        <add key="umbracoUseDirectoryUrls" value="false" />
        <add key="umbracoDebugMode" value="true" />
        <add key="umbracoTimeOutInMinutes" value="20" />
        <add key="umbracoVersionCheckPeriod" value="7" />
        <add key="umbracoDisableXsltExtensions" value="true" />
        <add key="umbracoDefaultUILanguage" value="en" />
        <add key="umbracoProfileUrl" value="profiler" />
        <add key="umbracoUseSSL" value="false" />
        <add key="umbracoUseMediumTrust" value="false" />
        <add key="umbracoContentXMLUseLocalTemp" value="false"/>
    </appSettings>
    <system.net>
        <mailSettings>
          <smtp deliveryMethod="SpecifiedPickupDirectory">
            <specifiedPickupDirectory pickupDirectoryLocation="c:\mail" />
          </smtp>
        </mailSettings>
        <!--
        <mailSettings>
            <smtp>
                <network host="127.0.0.1" userName="username" password="password" />
            </smtp>
        </mailSettings>
        -->
    </system.net>
    <!-- REMOVE FOR BETA -->
    <!-- added by NH to test foreign membership providers-->
    <connectionStrings>
        <remove name="LocalSqlServer" />
        <!--<add name="LocalSqlServer" connectionString="server=.\sqlexpress;database=aspnetdb;user id=DBUSER;password=DBPASSWORD" providerName="System.Data.SqlClient"/>-->
    </connectionStrings>
    <system.web>
        <!-- <trust level="Medium" originUrl=".*" />-->
        <customErrors mode="Off" />
        <trace enabled="true" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
        <sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
        <globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />
        <xhtmlConformance mode="Strict" />
        <httpRuntime requestValidationMode="2.0" />
        <pages enableEventValidation="false">
            <!-- ASPNETAJAX -->
            <controls>
                <add tagPrefix="umbraco" namespace="umbraco.presentation.templateControls" assembly="umbraco" />
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            </controls>
            <namespaces>
                <!-- ASP MVC -->
                <add namespace="System.Web.Mvc"/>
                <add namespace="System.Web.Mvc.Ajax"/>
                <add namespace="System.Web.Mvc.Html"/>
                <add namespace="System.Web.Routing"/>
                <add namespace="System.Linq"/>
                <add namespace="System.Collections.Generic"/>
            </namespaces>
        </pages>
        <httpModules>
            <!-- URL REWRTIER -->
            <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
            <add name="umbracoRequestModule" type="umbraco.presentation.requestModule" />
            <!-- UMBRACO -->
            <add name="viewstateMoverModule" type="umbraco.presentation.viewstateMoverModule, umbraco" />
            <add name="umbracoBaseRequestModule" type="umbraco.presentation.umbracobase.requestModule, umbraco" />
            <!-- CLIENT DEPENDENCY -->
            <add name="ClientDependencyModule" type="ClientDependency.Core.Module.ClientDependencyModule, ClientDependency.Core"/>
            <!-- ASP MVC -->
            <add name="RegisterRoutesModule" type="RegisterRoutesModule"/>          
        </httpModules>
        <httpHandlers>
            <remove verb="*" path="*.asmx" />
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
            <!-- UMBRACO CHANNELS -->
            <add verb="*" path="umbraco/channels.aspx" type="umbraco.presentation.channels.api, umbraco" />
            <add verb="*" path="umbraco/channels/word.aspx" type="umbraco.presentation.channels.wordApi, umbraco" />
            <!-- CLIENT DEPENDENCY -->
            <add verb="*" path="DependencyHandler.axd" type="ClientDependency.Core.CompositeFiles.CompositeDependencyHandler, ClientDependency.Core "/>
            <!-- SPELL CHECKER -->
            <add verb="GET,HEAD,POST" path="GoogleSpellChecker.ashx" type="umbraco.presentation.umbraco_client.tinymce3.plugins.spellchecker.GoogleSpellChecker,umbraco" />
            <!-- ASP MVC -->
            <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpHandlers>
        <compilation defaultLanguage="c#" debug="true" batch="false" targetFramework="4.0">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
                <!-- ASP MVC -->
                <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </assemblies>
        </compilation>
        <authentication mode="Forms">
            <forms name="yourAuthCookie" loginUrl="login.aspx" protection="All" path="/" />
        </authentication>
        <authorization>
            <allow users="?" />
        </authorization>
        <!-- Membership Provider -->
        <membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
            <providers>
                <clear />
                <add name="UmbracoMembershipProvider" type="umbraco.providers.members.UmbracoMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Another Type" passwordFormat="Hashed" />
                <add name="UsersMembershipProvider" type="umbraco.providers.UsersMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" passwordFormat="Hashed" />
            </providers>
        </membership>
        <!-- added by NH to support membership providers in access layer -->
        <roleManager enabled="true" defaultProvider="UmbracoRoleProvider">
            <providers>
                <clear />
                <add name="UmbracoRoleProvider" type="umbraco.providers.members.UmbracoRoleProvider" />
            </providers>
        </roleManager>
        <!-- Sitemap provider-->
        <siteMap defaultProvider="UmbracoSiteMapProvider" enabled="true">
            <providers>
                <clear />
                <add name="UmbracoSiteMapProvider" type="umbraco.presentation.nodeFactory.UmbracoSiteMapProvider" defaultDescriptionAlias="description" securityTrimmingEnabled="true" />
            </providers>
        </siteMap>
    </system.web>
    <applicationSettings>
        <umbraco.presentation.Properties.Settings>
            <setting name="umbraco_com_regexlib_Webservices" serializeAs="String">
                <value>http://regexlib.com/WebServices.asmx&lt;/value&gt;
            </setting>
        </umbraco.presentation.Properties.Settings>
    </applicationSettings>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
        <remove name="UrlRewriteModule"/>
        <remove name="umbracoRequestModule"/>
        <remove name="viewstateMoverModule"/>
        <remove name="umbracoBaseRequestModule"/>
        <remove name="ScriptModule"/>
        <remove name="ClientDependencyModule"/>
        <!-- URL REWRTIER -->
        <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
        <!-- UMBRACO -->
        <add name="umbracoRequestModule" type="umbraco.presentation.requestModule, umbraco" />
        <add name="viewstateMoverModule" type="umbraco.presentation.viewstateMoverModule, umbraco" />
        <add name="umbracoBaseRequestModule" type="umbraco.presentation.umbracobase.requestModule, umbraco" />
        <!-- ASPNETAJAX -->
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </modules>
    <handlers accessPolicy="Read, Write, Script, Execute">
      <remove name="WebServiceHandlerFactory-Integrated" />
      <remove name="ScriptHandlerFactory" />
      <remove name="ScriptHandlerFactoryAppServices" />
      <remove name="ScriptResource" />
      <!-- ASPNETAJAX -->
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <!-- UMBRACO CHANNELS -->
      <add verb="*" name="Channels" path="umbraco/channels.aspx" type="umbraco.presentation.channels.api, umbraco" />
      <add verb="*" name="Channels_Word" path="umbraco/channels/word.aspx" type="umbraco.presentation.channels.wordApi, umbraco" />
      <!-- CLIENT DEPENDENCY -->
      <add verb="*" name="ClientDependency" path="DependencyHandler.axd" type="ClientDependency.Core.CompositeFiles.CompositeDependencyHandler, ClientDependency.Core "/>   
      <!-- SPELL CHECKER -->
      <add verb="GET,HEAD,POST" name="SpellChecker" path="GoogleSpellChecker.ashx" type="umbraco.presentation.umbraco_client.tinymce3.plugins.spellchecker.GoogleSpellChecker,umbraco"/>
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

and the routing file

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

public class RegisterRoutesModule : IHttpModule
{
    public void Init(HttpApplication application)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        if (routes["Default"] == null){
            routes.MapRoute(
                "Default",
                "{controller}.aspx/{action}/{id}",
                new { action = "Index", id = "" }
              );
        }
        routes.MapRoute(
          "Root",
          "",
          new { controller = "Home", action = "Index", id = "" }
        );
    }

    public void Dispose()
    {

    }
}

i have very few knowledge of mvc, though i am a certified umbraco developer. what i suspect is that there are some routing issues, and the views folder is not found or something like that.

if anyone could shed some light or even point out where to look that would be great.

Sander

+1  A: 

You may want to look at your route mapping, I assume you are using IIS7: mvc typically uses the area/controller_name/action_name/{parameters} url format -

If you are using IIS6 with wildcard map you will need to use .aspx extension. (/home.aspx/index)

If you are using IIS7 however it must not be specified. (/home/index)

AJ