2013-03-14 89 views
2

獲取ID我建立一個MVC 4 Web應用程序,每當一個用戶試圖不經認證授權訪問一個安全的網頁我他們解僱登錄屏幕MVC從RETURNURL

[AllowAnonymous] 
public ActionResult Login(string returnUrl) 
{ 
    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

一旦登錄,我用的是RETURNURL串解僱他們回到他們以前想訪問的頁面。都好。

然而,我想知道,有反正從RETURNURL字符串獲取ID參數,例如,如果RETURNURL串是的

/場/ ICT/4

是有無論如何只得到價值4?

+0

不知道任何內置的方法,但你可以使用int found = returnUrl.LastIndexOf('/'),然後使用返回值和returnUrl.SubString(找到)如果找到> -1 – 2013-03-14 15:50:19

+0

@Nate At那一刻,我剛纔已經經過充分RETURNURL,這是沒有用的我。我原以爲微調與左或右弦的,但這又似乎並不喜歡這樣做,主要是因爲該參數可以是4或44,或甚至4444的方式,因此這將是很難知道很多很多字符修剪。有一種與這一個難倒! – tgriffiths 2013-03-14 15:50:32

+0

我剛剛發佈應該覆蓋MVC URI與ID參數的大多數情況下的答案。 – Nate 2013-03-14 18:40:07

回答

1

由於user2025312和這個職位Splitting the array with/slash

我能得到答案

public ActionResult Login(string returnUrl) 
{ 
    string[] myString = returnUrl.Split('/'); 

    var ID = myString[3]; 

    ViewBag.ReturnUrl = ID; 

    return View(); 
} 

希望這可以幫助其他人。

2

我想你可以用「/」分割字符串到一個數組,然後得到數組中的最後一個元素。

string[] splitURL = returnURL.Split('/'); 
string id = splitURL[splitURL.Length - 1]; 

等。希望這有些用處。

+0

添加代碼示例以將潛在數字解析爲ind - say Int.TryParse或其他內容。 – EtherDragon 2013-03-14 16:24:04

+0

謝謝,這很有幫助。 – tgriffiths 2013-03-14 16:30:21

1

您也可以使用這樣的

[^/]+$ 

正則表達式在你的控制,像這樣

var id = 0; 
int.TryParse(Regex.Match(urnUrl, "[^/]+$"), out id); 

編輯


顯然,這ANSW呃假定您將有以下形式的網址:

/Controller/Action/?id=783 

這將使上述方法(和張貼的其他方法)的充足。爲了支持這個,你需要做一些異常處理。

var id = 0; 
var afterSlash = Regex.Match(returnUrl, "[^/]+$"); 
if(int.TryParse(afterSlash, out id) == false) 
{ 
    if(int.TryParse(Regex.Match(afterSlash, "[^=]+$"), out id) == false) 
    { 
     // probably not a valid uri 
    } 
} 

這可能是一個好的開始,但您可能需要做更多的測試並根據您的環境進行修改。