2

我正在构建一个 MVC 4 Web 应用程序,每当用户尝试在未经身份验证的情况下访问安全页面时,我都会将它们触发到登录屏幕

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

一旦他们登录,我使用 returnURL 字符串将他们返回到他们之前想要访问的页面。都好。

但是,我想知道是否可以从 returnURL 字符串中获取 ID 参数,例如,如果 returnURL 字符串是

/课程/ICT/4

反正有没有得到价值4?

4

3 回答 3

2

我想您可以将字符串按“/”拆分为一个数组,然后获取数组中的最后一个元素。

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

等等。希望这有点用。

于 2013-03-14T16:11:46.543 回答
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(); 
}

希望这对其他人有帮助。

于 2013-03-14T16:29:56.007 回答
1

您也可以使用这样的正则表达式

[^/]+$

在你的控制器中像这样

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

编辑


显然,这个答案假设您不会有以下形式的 Uri:

/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
    }
}

这可能是一个好的开始,但您可能需要进行更多测试并根据您的环境进行修改。

于 2013-03-14T17:06:41.433 回答