我在asp.net mvc頁面的某些操作中使用了身份驗證屬性,以便將人員引用到登錄屏幕(如果他們未通過身份驗證)。我的問題是在他們登錄後將他們返回到引用頁面。我只是跟蹤引用操作和引用控制器,但是當我還需要跟蹤某些參數時,這會變得有問題。有沒有一些漂亮的內置竅門,我不知道?返回到引用頁
Q
返回到引用頁
7
A
回答
3
如果您正在使用FormsAuthentication,當ASP.NET用戶重定向到登錄頁面,網址看起來是這樣的:
http://www.mysite.com/Login?ReturnUrl=/Something
登錄表單的action屬性應該具有相同的ReturnUrl參數(作爲隱藏輸入或Url的一部分),以便FormsAuthentication可以將其選中並重定向,例如
<form action="Login?ReturnUrl=<%=Html.AttributeEncode(Request.QueryString["ReturnUrl"]) %>"></form>
或
<form><input type="hidden" name="ReturnUrl" id="ReturnUrl" value="<%=Html.AttributeEncode(Request.QueryString["ReturnUrl"])"%> /></form>
2
我做了什麼來達到這個效果可能會過度,我也想看看其他一些方法。不過,這是我的代碼。
請注意它使用Moq來模擬上下文......而且,我還沒有對querystring做過任何事情(我的路由不包含任何querystrings)。
var urlReferrer = Request.UrlReferrer;
if (urlReferrer != null)
{
var url = "~" + Server.UrlDecode(urlReferrer.PathAndQuery);
// get routecollection
var routeCollection = new RouteCollection();
GlobalApplication.RegisterRoutes(routeCollection);
// mcok context
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
context.Expect(ctx => ctx.Request).Returns(request.Object);
// mock request
// TODO: convert querystring to namevaluecollection
// now it's just stripped
if (url.IndexOf('?') > 0)
{
url = url.Substring(0, url.IndexOf('?'));
}
var mock = Mock.Get(context.Object.Request);
// TODO: insert namevaluecollection of querystring
mock.Expect(req => req.QueryString).Returns(new NameValueCollection());
mock.Expect(req => req.AppRelativeCurrentExecutionFilePath).Returns(url);
mock.Expect(req => req.PathInfo).Returns(string.Empty);
// get routedata with mocked context
var routeData = routeCollection.GetRouteData(context.Object);
var values = routeData.Values;
return RedirectToAction(routeData.Values["action"].ToString(), values);
}
正如我所說,這也許有點過於複雜:)
0
應始終確保引薦來源網址爲您的域名和可信的字符串,他們可以從現身之內。否則,這有可能被用於閃存或其他客戶端技術來執行響應拆分或其他已知和未知的攻擊。
HTTP引用是用戶輸入,它應該像其他任何驗證一樣。
相關問題
- 1. ajax不返回到PHP索引頁
- 2. 在子頁面的錨#top返回發送到索引頁
- 3. Java返回引用
- 4. C++:通過引用返回值返回
- 5. 得到返回的返回類型是對象的引用嗎?
- 6. 返回引用到局部變量
- 7. 當頁面返回到
- 8. 是否從Servlet返回Google索引頁?
- 9. GithHub頁面 - 沒有返回索引html
- 10. 重定向回到引用頁面
- 11. ActionResult返回到調用它的頁面
- 12. 頁面刷新返回到上一頁
- 13. C++返回值,引用,常量引用
- 14. 登錄頁面不會返回到刷新索引/家庭
- 15. 返回索引
- 16. 如何使返回到分頁按鈕返回到以前的分頁
- 17. C++ 11 lambda返回引用
- 18. 返回引用++方法
- 19. 返回無效的引用
- 20. C++引用和返回值
- 21. php返回或引用?
- 22. 返回引用父類C++
- 23. 傳遞和返回引用
- 24. 困惑返回引用
- 25. 通過JavaScript引用返回?
- 26. Zend引擎返回的對象引用
- 27. 索引屬性如何返回引用?
- 28. 返回白頁?
- 29. AJAX返回多個結果如何在返回特定結果時將用戶引導到另一個頁面?
- 30. 返回調用頁面javascript
就像一個額外的評論,我也使用上面的代碼來修改一些routedata的值。 – Casper 2008-10-08 08:21:09