2016-12-04 5 views
1

これが解決された場合はお詫び申し上げます。ASP.NET MVC - 起動中のイニシエータを確認

アクションの開始者が「クリック」または「ナビゲート」しているかどうかを確認しようとしています。すなわち、ユーザが物理的にリンクをクリックしたか、またはURLをタイプ入力/編集したかどうか。

アクションフィルタで使用できるリクエストがありますか、このクライアント側のみです。私はデバッグツールを使用しており、そこでイニシエータを見ることができます。

私は唯一のユーザーは、彼らがリンクをクリックしたアクションにアクセスし、直接ではなく、URLを入力することができるようにしたいとデバッグツールで、その後、私は別のページにリダイレクトすることができ

答えて

1

イニシエータ列を渡すことはできませんサーバー側に、それはちょうどブラウザによって提供されるデバッグ情報です。

ユーザーが(URLのリファラがnull)

アクションフィルタ属性がそのようになります(URLリファラがnullではない)別のページから来た、または移動するかどうかを判断するためにRequest.UrlReferrerを使用することができます

public class IsRequestFromSameDomainAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.UrlReferrer != null) 
     { 
      //do something 
     } 
     else 
     { 
      //do something 
     } 

    } 
} 
0

組み込みの偽造トークンを活用できます。これは、クライアント側のフォームに値を書き出すことによって動作し、サーバー側と比較される同じ状態のクッキーを持ちます。一致しない場合、要求は失敗します。ビュー中のSO

<script> 
    function submit(e) { 
     if (e.target.className.match(/submit/)) { 
     e.target.form.submit(); 
     } 
    } 

    document.body.addEventListener('click', submit); 
</script> 

@using (Html.BeginForm("url", "protected")) 
{ 
    @Html.AntiForgeryToken() 
    <a class="submit" href="/protected/url">Link</a> 
} 

そして唯一

[ValidateAntiForgeryToken] 
[HttpPost] 
public ActionResult Url() 
{ 
} 
+0

OPは、アドレスバーを介して、またはリンクをクリックしてどちらか(GETを作りについて質問され、関連する属性を必要とするアクションメソッド) - POSTではありません。 –

+0

「自分のリンクをクリックしたときにリクエストが行われることを確認する」(言い換えれば)は、偽造トークンには当てはまるようです。別の提案がありますか? – jdphenix

+0

Victor Leontyevからの回答を見てください:) –

関連する問題