C# 在asp.NETMVC2应用程序上,路由问题非常棘手,该应用程序在同一服务器上设置了两个相同的应用程序

C# 在asp.NETMVC2应用程序上,路由问题非常棘手,该应用程序在同一服务器上设置了两个相同的应用程序,c#,asp.net-mvc,asp.net-mvc-2,routing,C#,Asp.net Mvc,Asp.net Mvc 2,Routing,这听起来很奇怪。我有一个ASP.NETMVC2应用程序。效果很好。路由不是很复杂。我在Windows2003IIS6上运行这个,所以我必须使用{controller}.aspx路由配置 无论如何,我已经在IIS的不同虚拟目录下设置了两次相同的MVC2应用程序。这实际上是将现有应用程序文件复制/粘贴到新目录。当然,每个虚拟目录/应用程序的名称不同 路由在原始应用程序中工作得非常完美。在第二种情况下,我似乎无法让登录页面发布到login post操作,更不用说让它超出这个范围了 我的应用程序中最复杂

这听起来很奇怪。我有一个ASP.NETMVC2应用程序。效果很好。路由不是很复杂。我在Windows2003IIS6上运行这个,所以我必须使用{controller}.aspx路由配置

无论如何,我已经在IIS的不同虚拟目录下设置了两次相同的MVC2应用程序。这实际上是将现有应用程序文件复制/粘贴到新目录。当然,每个虚拟目录/应用程序的名称不同

路由在原始应用程序中工作得非常完美。在第二种情况下,我似乎无法让登录页面发布到login post操作,更不用说让它超出这个范围了

我的应用程序中最复杂的url类似于:

http://server:90/appName/controller.aspx/AnAction?StartPeriod=2008
My global.asax.cs看起来像:

        routes.IgnoreRoute("{resource}.html/{*pathInfo}");
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",
            "{controller}.aspx/{action}/{id}",
            new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }
          );

        routes.MapRoute(
          "Root",
          "",
          new { controller = "Account", action = "LogOn", id = "" }
        );
该应用程序只有2个控制器:Account和Mpa。同样,相同IIS服务器上不同应用程序名称/虚拟目录下的两个位置都存在完全相同的编译代码。除了显示帐户控制器的登录页面外,任何人都能想出一个原因,让我在复制的帐户中获得不同的行为,一个不工作/找不到视图/抛出404

编辑1

另一件值得一提的事情是,我正在Mpa.aspx控制器中的所有post方法上使用ValidateAntiForgeryToken属性。这是在post to Account.aspx之后应该重定向到的控制器,这似乎并没有真正发生。我认为问题在于,自从我复制粘贴以来,ValidateAntiForgeryToken用于两个应用程序的salt值是相同的。我已经更改了原始应用程序的值,但仍然得到相同的结果

FYI: Here are the details returned from firebug. 

    **GET Account.aspx**
    http://server:90/MpaDemo/Account.aspx 200 OK 2.9 KB 15ms

    ParamsHeadersPostPutResponseCacheHTML
    Response Headersview source
    Date    Thu, 26 Aug 2010 20:42:57 GMT
    Server  Microsoft-IIS/6.0
    X-Powered-By    ASP.NET
    X-AspNet-Version    2.0.50727
    X-AspNetMvc-Version 2.0
    Set-Cookie  ASP.NET_SessionId=z1q43ezg2hvtx255i5y5df21; path=/; HttpOnly
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  2921
    Request Headersview source
    Host    server:90
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Authorization   NTLM TlRMTVNTUAADAAAAGAAYAHoAAAAYABgAkgAAAAoACgBIAAAADgAOAFIAAAAaABoAYAAAAAAAAACqAAAABYKIogUBKAoAAAAPdABtAGsAbgBiAGIAMAAwADUAagB4AGIATQBTAEoAQQBLAE0ATwBMADIANAAxADAAOADIJ4z3L+WAUAAAAAAAAAAAAAAAAAAAAABhigoN+1bIPZirxXzNQHWNIu/rx4Senq8=


    **Account.aspx POST**

    Date    Thu, 26 Aug 2010 20:44:26 GMT
    Server  Microsoft-IIS/6.0
    X-Powered-By    ASP.NET
    X-AspNet-Version    2.0.50727
    X-AspNetMvc-Version 2.0
    Location    /MpaDemo/Mpa.aspx/CustomErrorView?aspxerrorpath=/MpaDemo/Account.aspx
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  200
    Request Headersview source
    Host    SERVER:90
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Referer http://SERVER:90/MpaDemo/Account.aspx
    Cookie  ASP.NET_SessionId=z1q43ezg2hvtx255i5y5df21

    **GET CustomErrorView**

    Response Headersview source
    Date    Thu, 26 Aug 2010 20:44:26 GMT
    Server  Microsoft-IIS/6.0
    X-Powered-By    ASP.NET
    X-AspNet-Version    2.0.50727
    Cache-Control   private
    Content-Type    text/html; charset=utf-8
    Content-Length  1534
    Request Headersview source
    Host    server:90
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 (.NET CLR 3.5.30729)
    Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive
    Referer http://server:90/MpaDemo/Account.aspx
    Cookie  ASP.NET_SessionId=z1q43ezg2hvtx255i5y5df21

可能从IIS 6切换到IIS Developer Express,后者应在2003年运行,并支持所有新的MVC功能

引用自ScottGu的网站:

•它可以在Windows XP和更高版本的操作系统上工作–在所有操作系统平台上为您提供完整的IIS 7.x developer功能集


好吧,这很烦人。我忘了检查我复制的文件夹的权限。显然,试图写入日志&无法抛出一个错误,我的try/catch块捕捉到了这个错误,但在catch中,我尝试记录这个错误,它抛出了另一个错误,我的general catch all页面应该捕捉到这个错误,但没有,因为web.config在另一个控制器下

叹息

长话短说,我删除了共享错误页面的控制器要求,如下所示:

Was:defaultRedirect=~/Mpa/CustomErrorView现在是:defaultRedirect=~/CustomErrorView

错误页面的视图位于“视图”文件夹的共享目录中

最后,我向日志文件夹添加了正确的权限

现在一切都好了


哇。我花了6个小时才弄明白。我觉得自己真的很糟糕。

当你点击“登录”按钮时,它实际上会发布到哪里?使用Firefox中的Firebug来找出答案。嘿@mare。因为没有想到这一点而责怪自己。Firebug说它应该发布到Account.aspx;但是,当出现问题时,会立即向我的CustomErrorView发出Get请求,这是我的实际错误页面。但是,该页面实际上并没有显示出来。404是此URL Get请求的状态。我的post操作中有一行应该写入日志文件,但这种情况从未发生过,因此post似乎没有实际完成。Post to Account.aspx的状态为302。请注意,在我的其他网站上,一切正常。Post to Account.aspx的状态为200 OK。这必须是特定于操作系统和IIS的,非常奇怪,除非有人已经遇到此问题并解决了它,否则调试将是一种过度的操作。我感谢您的建议,但我们无法在服务器上真正更改IIS,因为此应用程序将在Windows 2003/IIS 6计算机上投入生产。IIS Dev Express不适用于生产使用。它还没有准备好投入生产,但可能需要几个月甚至更短的时间,因此可能值得使用它进行测试。我理解您的感受,但它确实发生了。每次它发生时,你都会发现你真的需要开始跳出框框,从一种极端的意义上说,因此,也许下次它发生时,你将能够想到与你的问题有关的最不可能的选择;别开玩笑了。谢谢你的帮助。我从firebug那里得到了一些帮助,这将对未来有所帮助。这是一个很好的例子,说明你知道事情应该是正常的。我不应该走这条路线……从一开始就没有任何意义。如果我只是退一步考虑一下,而不是像一个疯子那样尝试随机的事情,权限将是首选。再次感谢你的帮助,玛丽!