2016-03-31 15 views
1

重複していますが、前のページに戻る最良の方法を見つけようとしています。コントローラーでサーバー側の検証を行います。Request.UrlReferrerを使用してRedirectToAction

私は、これはAntiForgeryトークンの問題を提起...

Response.Redirect("~" + Request.UrlReferrer.LocalPath); 

をおそらく悪い習慣あるいくつかのことを、試してみました。また

:上げ

RedirectToRoute(Request.UrlReferrer.LocalPath); 

潜在的に危険なRequest.Path値が クライアント(:)から検出されました。

他にもうまくいきませんでした。

私は

EDIT、Request.UrlReferrerを利用して、私のビューまたはのviewmodelsに余分な追加を必要としないいくつかの提案をしてください必要があります:私はこれまでの検索何から 、ウォールドはになる最良の方法

return RedirectToAction(string actionName, string controllerName, RouteValueDictionary routeValues); 

しかし、どのように私はRequest.UrlReferrerオブジェクトを利用することによって、この(string actionName, string controllerName, RouteValueDictionary routeValues)のパラメータ値を取得することができますを使用します?

+0

UrlReferrerの一般的な使用について警告してください。あなたが期待するものに設定されていない可能性があります。 – Mats

+0

@マティアス、警告ありがとう!私は一緒に提案を感謝しています:) – cnom

答えて

0

これはXY Problemのようです。おそらく、ユーザーをページに誘導して何らかのアクションを実行し、元のページにリダイレクトしたい場合があります。そのページのフォームに、あなたが追加し、その後

<a href="@Url.Action("Foo", new { returnUrl = Request.RawUrl })">Do something</a> 

それを行うための正しい方法は、彼らは、クエリ文字列に戻りURLでアクションを実行する必要がありますページにそれらを送信することです
@Url.Hidden("returnUrl", Request["returnUrl"]) 

は最後に、あなたのポストにアクション:1)全く存在することが保証されていないし、それであっても2)、値は自明詐称することができますので、

public ActionResult Foo (MyModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     // do something 

     if (!String.IsNullOrWhiteSpace(returnUrl) && Url.IsLocalUrl(returnUrl)) 
     { 
      return Redirect(returnUrl); 
     } 

     return RedirectToAction("Fallback"); 
    } 

    return View(model); 
} 

UrlReferrerを使うのは危険です。

関連する問題