在ASP.NET MVC3 Web應用程序中,整個控制器都附有[Authorize]
屬性。所以如果用戶沒有登錄或會話過期,他們會被重定向到登錄頁面。這有效。下面的「作品」列表中的網址正確地重定向到登錄頁面; 「不工作」列表中的URL會顯示IIS 401錯誤屏幕 - 它們不會重定向到登錄頁面。如果URL有查詢字符串,AuthorizeAttribute不起作用?
作品
- http://x.y.z/MyController/MyAction
- http://x.y.z/MyController/MyAction/123
- http://x.y.z/MyController/MyAction/123?X=Y
不起作用
- http://x.y.z/MyController/MyAction/123?ReturnUrl=
- http://x.y.z/MyController/MyAction/123?ReturnUrl=XYZ
爲MyAction
動作模型具有在它的基類一個public string ReturnUrl { get; set; }
。它也有其他屬性,但將它們添加到查詢字符串不會影響登錄重定向。它似乎只是ReturnUrl參數。
我不知道還有什麼要看的。任何想法爲什麼ReturnUrl
參數會造成麻煩?
路線
routes.MapRoute("Default-Title-ID", "{Controller}/{Action}/{Title}_{ID}", namespaces);
routes.MapRoute("Default-ID", "{Controller}/{Action}/{ID}", namespaces);
routes.MapRoute("Default", "{Controller}/{Action}", new { Controller = "Home", Action = "Index" }, namespaces);
routes.MapPageRoute("Reports-View", "ViewReport_{ID}", "~/Views/Reports/View.aspx");
工作實例(好吧,不工作,但說明了這個問題。)
這裏下載解決方案:https://docs.google.com/file/d/0B4o6vqgNLpvbeVo4bVdKZWFMcEE/edit?usp=sharing
,然後嘗試請訪問:
- http://your.local.host/Test/TestMe?ReturnUrl= - 您將不是被重定向到登錄頁面。
- http://your.local.host/Test/TestMe - you 將重定向到登錄頁面。
尤物。我假設沒有使用異國路線。 – 2013-04-20 03:05:03
@DaveA正常路線 - 將它們添加到上面。 – 2013-04-20 03:07:16
查看這些路線,我懷疑路線引擎變得困惑......'Default-Title-ID'和'Default-Title-ID'之間沒有有效的區別 - 它們都有第三個ID參數,但是當使用url時,路由引擎不知道選擇哪個引擎。 True'Default'是補充,因爲Controller和Action都是可選的,但是這條路線傳統上是作爲2nd 1st的一部分來實現的,以便爲路線引擎提供更大的靈活性。我強烈建議嘗試合併3條路線,然後看看你是否仍然有同樣的問題。 – 2013-04-20 05:34:20