代码之家  ›  专栏  ›  技术社区  ›  jason

路由在ASP.NET MVC 2应用程序上很疯狂,该应用程序在同一服务器上设置了2个相同的应用程序。

  •  1
  • jason  · 技术社区  · 15 年前

    这听起来很奇怪。我有一个ASP.NET MVC 2应用程序。工作很好。路由不是很复杂。我在Windows2003IIS6上运行这个,所以我必须使用控制器.aspx路由配置。

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

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

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

    http://server:90/appName/controller.aspx/AnAction?StartPeriod=2008
    

    我的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 = "" }
            );
    

    该应用程序只有两个控制器:account&mpa。同样,在同一个IIS服务器上的不同应用程序名/虚拟目录下,两个位置都存在完全相同的编译代码。有人能想到为什么我会在复制的一个中得到不同的行为(不工作/找不到视图/抛出404的,除了显示帐户控制器的登录页面之外的所有东西)?

    编辑1

    另一件值得一提的事情是,我正在mpa.aspx控制器中的所有post方法上使用validatentiforgerytoken属性。这是在发布到account.aspx之后应该被重定向到的控制器(这看起来并不是真的发生)。我认为问题在于,由于复制和粘贴了两个应用程序,用于validateNationForgeryToken的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
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   mare    15 年前

    也许可以从IIS6切换到IISDeveloperExpress,后者应该在2003年运行,并支持所有新的MVC功能。

    引自Scottgu网站:

    _,它适用于Windows XP和更高版本的操作系统,为您提供在所有操作系统平台上设置的完整的IIS 7.x开发人员功能。

    http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx

    http://blogs.iis.net/vaidyg/archive/2010/07/06/introducing-iis-developer-express.aspx

    Download

        2
  •  0
  •   jason    15 年前

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

    叹息

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

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

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

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

    现在一切正常。

    真的。我花了6个小时才弄明白。我觉得真的,真的很跛脚。