在asp.net中使用mvc与webforms CMS结合使用时未找到mvc视图

时间:2010-04-28 09:52:35

标签: c# asp.net asp.net-mvc asp.net-mvc-2 umbraco

我们在umbraco 4.1 cms(webforms)默认.net 3.5中建立了一个网站 我们在.net 4.0

上使用MVC2.0构建了一些MVC工具和控件

我设法让umbraco cms在.net 4.0中运行 我一直在关注this指南的部分内容(适用于mvc 1.0和umbraco 4.0.3)

但现在我被卡住了, umbraco有很多url管理本身,所以我使用urlRewriting.net(包含在umbraco中) 将某个网址重定向到http://domain/umbraco/mvc.ashx?mvcRoute=/home.aspx/index 例如。

我知道网址重写有效(如果我强制将错误输入mvc.ashx,我会在浏览器窗口中收到它。 但每次进入ProcessRequest时,都会向屏幕抛出“资源未找到”错误

这是我使用

的mvc.ashx的完整代码
<%@ 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; }
    }
}

这是我使用的web.config

<?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</value>
            </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>

和路由文件

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()
    {

    }
}
虽然我是一名经过认证的umbraco开发人员,但我对mvc知之甚少。 我怀疑是有一些路由问题,找不到views文件夹或类似的东西。

如果有人能说清楚的话 甚至指出要去哪里看 那会很棒。

桑德

1 个答案:

答案 0 :(得分:1)

您可能希望查看路由映射,我假设您使用的是IIS7:mvc通常使用区域/ controller_name / action_name / {parameters} url格式 -

如果您使用带有通配符映射的IIS6,则需要使用.aspx扩展名。 (/home.aspx/index)

如果您使用的是IIS7,则不得指定它。 (/家/索引)