私は 90% 完了した ASP.NET MVC 4 ブログを持っていますが、1 つ必要なことがあります。index/secretPage と言う Web ページがありますが、別の Web ページからリダイレクトされた後にのみ、この Web ページに移動できるようにしたいと考えています。インデックス/リダイレクト。アドレスがハードコーディングされている場合はナビゲートできません。訪問者が blog/post/24 などの別のリンクから来ている場合もナビゲートできないはずです。私の質問が明確であることを願っています。すべての助けを借りて。
2 に答える
直接呼び出された場合に別のページを表示するアクションを使用して、シークレット ページをマスクすることもできます。
この例では、2 つのアクションがあります。偽のビューを返すための「シークレット」と、実際の呼び出しのための「チェック」。このアクションでは、bool 変数 'allowSecret' がチェックされ、許可されている場合はビュー 'secret.cshtml'、許可されていない場合は 'index.cshtml' が表示されます。
その機能を備えた単純なコントローラーのコード例を次に示します。
using System.Web.Mvc;
namespace Test.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Index");
}
public ActionResult Check()
{
// check if user is allowed to show secret page
if(allowSecret == true)
return View("Secret");
// Otherwise return view 'index.cshtml'
return View();
}
public ActionResult Secret()
{
// Always shows view 'index.cshtml' if url is ".../secret"
return View("Index");
}
}
}
「偽のビュー」を呼び出す代わりに、チェックが失敗した後に別のアクションにリダイレクトすることもできます。
return RedirectToAction("Index")
違いは、ユーザーがブラウザに表示する URL です。ビューを返しても URL は変更されません。別のアクションにリダイレクトすると、URL は変更されたルートに変更されます。
もちろん、コントローラーの背後にある別のクラスにチェックを配置できます。
もう 1 つのオプションは、「NonAction」属性を使用することです。
[NonAction]
public ActionResult Check()
{
...
}
よろしくお願いします。
DD
UrlReferrer
誰がこの現在のページを参照したかを知り、例外をスローしたり、リダイレクトしたりできます
HttpContext.Current.Request.UrlReferrer
http://msdn.microsoft.com/en-IN/library/system.web.httprequest.urlreferrer.aspx
しかし、何らかの理由でこれが必要です。私には良いデザインに見えません。
お役に立てれば