【发布时间】:2011-04-04 11:22:51
【问题描述】:
这听起来很奇怪。我有一个 ASP .NET MVC 2 应用程序。效果很好。路由不是很复杂。我在 Windows 2003 IIS 6 上运行它,所以我必须使用 {controller}.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 = "" }
);
该应用程序只有 2 个控制器:Account 和 Mpa。同样,完全相同的编译代码存在于同一 IIS 服务器上不同应用程序名称/虚拟目录下的两个位置。谁能想到我在复制的行为中会出现不同行为的原因(除了显示帐户控制器的登录页面之外的几乎所有内容都不起作用/找不到视图/抛出 404)?
编辑 1
另一件值得一提的是,我在 Mpa.aspx 控制器中的所有 post 方法上都使用了 ValidateAntiForgeryToken 属性。这是在发布到 Account.aspx 之后应该重定向到的控制器(这似乎并没有真正发生)。我认为问题在于用于 ValidateAntiForgeryToken 的盐值对于两个应用程序都是相同的,因为我复制并粘贴了。我已经更改了原始应用程序的值,但仍然得到相同的结果。
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
【问题讨论】:
-
当您点击登录按钮时,它实际发布到哪里?使用 Firefox 中的 Firebug 找出答案。
-
嘿@mare。踢自己没有考虑到这一点。 Firebug 说它应该发布到 Account.aspx;但是,当出现问题时,会立即向我的 CustomErrorView 发出 Get 请求,这是我事实上的错误页面。这个页面实际上并没有显示出来。 404 是此 URL 获取请求的状态。我的 post 操作中有一行应该写入日志文件,但从未发生过,因此 Post 似乎并未真正完成。 Post to Account.aspx 的状态为 302 Found。
-
请注意,在我的其他网站上一切正常,Account.aspx 的发布状态为 200 OK。
-
这必须是特定于操作系统和 IIS 的,非常奇怪,除非有人已经遇到此问题并解决了它,否则调试将是过度的。
标签: c# asp.net-mvc asp.net-mvc-2 routing