2016-05-25 17 views
1

私は2つのコントローラBaseとLoginを持っています。asp.net mvcコントローラでreturnurlを取得できません

ベースコントローラ:

public ActionResult start() 
    { 
     string action = Request.QueryString[WSFederationConstants.Parameters.Action]; 
    } 

ログインコントローラー:

public ActionResult Login(string user,string password,string returnUrl) 
    { 
     if (FormsAuthentication.Authenticate(user, password)) 
     { 

      if (string.IsNullOrEmpty(returnUrl) && Request.UrlReferrer != null) 
       returnUrl = Server.UrlEncode(Request.UrlReferrer.PathAndQuery); 

      return RedirectToAction("Start","Base", returnUrl }); 
     } 
     return View(); 
    } 

認証した後は、それが予想通りベースコントローラにアクションを開始するためにリダイレクトされます行われます。 しかし、クエリ文字列は値をフェッチしません。 querystringの上にホバーすると、長さの値は表示されますが、uriは表示されません。

どのようにベースコントローラにログインコントローラから送信されたURLを使用して、それからパラメータを取得するには?

+0

'WSFederationConstants.Parameters.Action'は何ですか。そして、その定数の値が '' returnUrl "'であれば 'return RedirectToAction(" Start "、" Base "、new {returnUrl = returnUrl}); "returnUrl"の文字) –

+0

@StephenMueckeが提案したように、ベースコントローラーでURLを取得できました。しかし、取り出したURLが/(スラッシュ)と?(疑問符)の代わりに '%2f%f wsignin ...'と表示されていますので、アクション変数はクエリ文字列からアクションを取得できません。 –

+0

それはメソッドがそれをエンコードするためです。しかし、これの目的は何ですか? 'returnUrl'の値があれば、' return RedirectToLocal(returnUrl); 'を使ってリダイレクトするのはなぜですか?' start() 'メソッドは何ですか? –

答えて

0

あなたが実際にクライアントに302を戻ってきています。 docsより。

ブラウザにHTTP 302応答を返します。これにより、ブラウザ は指定されたアクションに対してGET要求を行います。

これを実行すると、クライアントは作成したURLで別のリクエストを行います。あなたの場合、youruri.org/Base/Startのようなものです。ブラウザの[ネットワーク]タブ(ChromeのF12)をご覧ください。私はあなたがやりたいと思う何

は次のとおりです。

return RedirectToAction 
    ("Start", "Base", new { WSFederationConstants.Parameters.Action = returnUrl }); 

WSFederationConstants.Parameters.Actionが一定であると仮定すると。 WSFederationConstants.Parameters.Actionが文字列を返す場合fooUrlあなたの行動は、ブラウザに次のように返されます:あなたのリダイレクト

public class BaseController: Controller 
{ 
    public ActionResult start(string myAction) 
    { 
     string localAction = myAction; //myAction is automatically populated. 
    } 
} 

とIn:

Location:/Base/Start?fooUrl=url 
Status Code:302 Found 

別のオプションは、実際にコントローラに値を渡すことです

return RedirectToAction 
    ("Start", "Base", new { myAction = returnUrl }); 

その後BaseControllerは自動的にパラメータを取得します、あなたはクエリ文字列からそれをフェッチする必要はありません。 。

+0

私はURLの中に多くのパラメータを持っています。私はquerystringを使用してそれらをフェッチしなければならないと私はベースコントローラでURLを取得することができますスティーブンで示唆した。しかし、取り出したURLが/(スラッシュ)と?(疑問符)の代わりに '%2f%f wsignin ...'と表示されていますので、アクション変数はクエリ文字列からアクションを取得できません。 –

関連する問題