2010-01-29 127 views
8

(這是一個更窄的問題)爲什麼Request.QueryString [「ReturnUrl」]返回NULL,即使它存在於URL中?

在我的asp.net MVC操作中,我正在查看ReturnUrl值是否在URL中。

我的網址是這樣的:

http://localhost:56112/user/login?ReturnUrl=/user/settings 

在我的行爲,我要找如果查詢字符串值存在,它返回NULL?怎麼會這樣?

代碼:

if(Request.QueryString["ReturnUrl"] != null) 
{ 

} 

通過應用程序跟蹤,它只是跳過if語句的身體即是NULL。

這怎麼解釋?

更新

在來檢查,如果用戶已經登錄了,我有一個ActionFilter看起來像控制器:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 
     // some stuff 
     string loginUrl = FormsAuthentication.LoginUrl + "/user/settings; 

     context.Response.Redirect(loginUrl); 
    } 
+0

我只是跑了一個快速測試,它爲我工作得很好。你使用任何自定義的http處理程序或類似的東西? – 2010-01-29 15:46:45

+0

看看這個以及:http://stackoverflow.com/questions/1783059/query-string-with-slashes-not-working-in-asp-net-mvc – 2010-01-29 15:52:25

+0

@jacerhea我有一個自定義過濾器,它會重定向到登錄頁面。看到我上面的更新 – Blankman 2010-01-29 19:44:59

回答

3

嘗試調試代碼 - 你應該能夠看到調試程序的QueryString參數的整個列表,所以你可以看看你是否拼寫錯誤。

+0

我的querystring集合是空的,但我可以在URL中看到?ReturnUrl =/user/settings。 – Blankman 2010-01-29 15:07:12

+1

你能得到Request.RawUrl字符串,並驗證請求確實具有查詢字符串的完整URL嗎? – 2010-01-29 15:50:24

+0

Request.RawUrl沒有查詢字符串。很奇怪,瀏覽器中的網址雖然? – Blankman 2010-01-29 21:31:56

1

剛剛遇到類似的問題我自己。

Request.RawUrl是正確的,提交給瀏覽器的url缺少QueryString。檢查頁面的查看源代碼,並驗證表單元素的action屬性的url。您可能會發現QueryString丟失。

可能發生的情況是,您使用的是採用routeValues參數的@ Html.BeginForm的重載。對「routeValues」使用任何重載將生成一個新的路由URL並去除任何查詢字符串參數。就我而言,我想添加enctype屬性,唯一的過載需要指定routeValues。我想這是MVC 3中的一個疏忽。

但是,您仍然可以用老式的方式編寫自己的窗體標籤。查看MVC 3的源代碼,看起來Html.BeginForm的基本重載使用Request.RawUrl。

嘗試以下操作:

<form action="@Request.RawUrl" method="post" enctype="multipart/form-data"> 
0

我也有類似的問題,因爲新手Asp.Net MVC開發。問題是將表單發佈到其特定控制器的登錄表單。所以缺少查詢字符串值是非常正常的。因爲表單動作屬性就像action =「/ index/login」

我應用的解決方案是使用查詢字符串中的值向我的表單添加隱藏字段。這需要作爲參數添加到ActionResult或模型中。

@Html.Hidden("returnUrl", Request.QueryString["returnUrl"]) 

另一種解決方案是將它傳遞給表單的動作URL,如:

@using (Html.BeginForm("login", "contr", new {returnUrl = Request.QueryString["returnUrl"]})