ASP.NET MVC 4使页面无法直接访问

时间:2013-03-28 09:32:49

标签: c# asp.net asp.net-mvc

我有一个ASP.NET MVC 4博客已完成90%,但我需要一件事 - 我有一个网页让我们说索引/ secretPage但我希望能够导航到这个webPage只有在我从另一个重定向后 - 让我们说索引/重定向。如果地址是硬编码的,则不应导航,如果访问者来自不同的链接,例如blog / post / 24,则它也应该无法导航。 我希望我的问题很清楚,而不是你的帮助。

2 个答案:

答案 0 :(得分: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更改为更改的路径。

当然,您可以将支票放在控制器后面的另一个类中。

另一种选择是使用'NonAction'属性

[NonAction]
public ActionResult Check()
{
   ...
}

希望有所帮助,

DD

答案 1 :(得分:0)

您可以UrlReferrer了解谁是当前页面的引用并抛出异常或重定向回来

HttpContext.Current.Request.UrlReferrer

http://msdn.microsoft.com/en-IN/library/system.web.httprequest.urlreferrer.aspx

但是出于什么原因你需要这个。它对我来说看起来像个好设计。

希望这有帮助