开发者

Routing goes nuts on asp .net mvc 2 application that is the same app set up 2x on the same server

This is going to sound quite bizarre. I have one ASP .NET MVC 2 application. Works great. Routing is not very complicated. I am running this on windows 2003 IIS 6, so I have to use the {controller}.aspx routing configuration.

Anyhow, I've set the same MVC 2 application up twice under different virtual directories on IIS. This is literally a copy/paste of the existing app files to the new directory. The virtual directory / app name is of course different for each.

Routing works perfect in the original application. In the second, I can't seem to get the login page to post to the login post action, let alone make it beyond that.

The most complicated url in my application is something akin to:

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

My global.asax.cs looks like:

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

The application only has 2 controllers: Account & Mpa. Again, the exact same compiled code exists in both places on the same IIS server under different app names/virtual directories. Can anyone think of a reason I would get different behavior in the copied one (doesn't work/can't find views/throws 404's for just about everything beyond displaying the LogOn page of Account controller)?

EDIT 1

Another thing worth mentioning is that I'm using ValidateAntiForgeryToken attributes on all post methods in the Mpa.aspx controller. This is the controller that should be redirected to after the post to Account.aspx (which doesn't seem to really happen). I thought the issue was that the salt value used for the ValidateAntiForgeryToken was the same for both applications since I copied & pasted. I've since changed the value for the original application, but I'm still getting the same results.

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 He开发者_运维问答adersview 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


Maybe switch from IIS 6 to IIS Developer Express which should run on 2003 and support all the new MVC features.

Quote from ScottGu's site:

•It works on Windows XP and higher operating systems – giving you a full IIS 7.x developer feature-set on all OS platforms

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


Okay, this is annoying. I forgot to check permissions on the folders I copied. Apparently, attempting to write to the log & not being able to threw an error, which my try/catch block caught, but then in the catch, I try logging the error, which threw another one, which my general catch all page should have caught, but didn't because the web.config had it under another controller.

sigh

Long story short, I removed the controller requirement for the shared error page like so:

Was: defaultRedirect="~/Mpa/CustomErrorView" Is now: defaultRedirect="~/CustomErrorView"

The view for the error page is in the Shared directory of the Views folder.

Lastly, I added the correct permissions to my logging folder.

Now it all works.

Wow. This took me 6 hours to figure out. I feel really, really lame.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜