【问题标题】:MVC Get ID from ReturnURLMVC 从 ReturnURL 获取 ID
【发布时间】:2013-03-03 01:40:29
【问题描述】:

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

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

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

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

/Course/ICT/4

有没有办法只得到 4 的值?

【问题讨论】:

  • 不知道任何内置方法,但您可以使用 int found = returnUrl.LastIndexOf('/') 然后使用 returnUrl.SubString(found) 如果找到的返回值是 > - 1
  • @Nate 目前,我刚刚传递了完整的 returnURL,这对我没有用。我曾想过用左或右修剪字符串,但这似乎不是这样做的方法,主要是因为参数可能是 4,或 44,甚至 4444,因此很难知道很多要修剪的字符。有点被这个难住了!
  • 我刚刚发布了一个答案,该答案应该涵盖大多数带有 ID 参数的 MVC uri 情况。

标签: c# asp.net-mvc url query-string


【解决方案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
    }
}

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

【讨论】:

    【解决方案2】:

    感谢 user2025312 和这篇帖子Splitting the array with / slash

    我得到了答案

    public ActionResult Login(string returnUrl) 
    {
        string[] myString = returnUrl.Split('/');
    
        var ID = myString[3];
    
        ViewBag.ReturnUrl = ID;
    
        return View(); 
    }
    

    希望这对其他人有所帮助。

    【讨论】:

      【解决方案3】:

      我想你可以用“/”将字符串拆分成一个数组,然后得到数组中的最后一个元素。

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

      等等。希望这有一些用处。

      【讨论】:

      • 添加代码示例以将潜在数字解析为 ind - 例如 Int.TryParse 或其他内容。
      猜你喜欢
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多