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

C# ASP.NET MVC 4使页面无法直接访问,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个ASP.NET MVC 4博客,完成了90%,但我需要一件事-我有一个网页,比如说索引/加密页,但我希望只有在我从另一个网页重定向后才能导航到此网页-比如说索引/重定向。如果地址是硬编码的,则不应导航;如果访问者来自不同的链接,如blog/post/24,则也不应导航。 我希望我的问题很清楚,谢谢大家的帮助。您可以urlreferer了解谁引用了当前页面,并抛出异常或重定向返回 HttpContext.Current.Request.UrlReferrer 但不管你为什么需要这个。在

我有一个ASP.NET MVC 4博客,完成了90%,但我需要一件事-我有一个网页,比如说索引/加密页,但我希望只有在我从另一个网页重定向后才能导航到此网页-比如说索引/重定向。如果地址是硬编码的,则不应导航;如果访问者来自不同的链接,如blog/post/24,则也不应导航。
我希望我的问题很清楚,谢谢大家的帮助。

您可以
urlreferer
了解谁引用了当前页面,并抛出异常或重定向返回

HttpContext.Current.Request.UrlReferrer

但不管你为什么需要这个。在我看来,这不是一个好的设计


希望这有帮助

如果直接调用,您还可以使用显示另一页的操作来屏蔽机密页

在本例中,有两个操作。”返回虚假视图的“秘密”和真实调用的“检查”。在这个操作中,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更改为更改的路由

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

另一个选项是使用“非操作”属性:

[NonAction]
public ActionResult Check()
{
   ...
}
希望有助于向您致以亲切的问候


DD

检查url引用者,如果它不是预期页面,则发出404或重定向到previous?您可以使用
Request.urlReferer
获取用户以前来自的url,如果它不是
index/redirect
或其他内容,则可以执行类似
Response.StatusCode=404,Response.Status=404的操作“404未找到”
响应。重定向(“..”)
@RobIII Erm..问题被标记为
asp.net
..@RobIII他显然是在回应你关于我的评论的长篇大论,澄清他确实理解什么是推荐人。然后你继续陈述
我收集到georgi it不理解推荐人/重定向概念,所以我给他指出了正确的方向在他/她开始寻找错误的地方之前,你的阅读理解可能需要一点努力。@Robii很抱歉,下次我会说:我知道什么是HTTP引用,我知道什么是HTML,我还熟悉我的计算机电源,请告诉我我没有提到的所有内容。我想我的问题很清楚,star尽管它被标记为asp.net,也许现在这场争论将停止。虽然从技术上来说,这是对你所问问题的正确回答,但请记住,这根本不安全。你真正想做的是使用某种形式的身份验证。要强调这一点:依赖推荐人不像我那样安全。对我来说,它也闻起来像“不太好”“设计。我完全明白这一点,谢谢你指出anyways@RobIII这不会保护我的TopSecretAwesome管理页面,这是为了一些不同的东西,与网站安全性无关很好,很高兴它帮助了你:))