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

このような正規表現を使用することもできます

[^/]+$

あなたのコントローラーではそうです

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 に答える
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 に答える