Asp.net 阻止用户访问可由代码访问的操作

Asp.net 阻止用户访问可由代码访问的操作,asp.net,asp.net-mvc,attributerouting,Asp.net,Asp.net Mvc,Attributerouting,我使用最新的MVC,带有属性路由 当用户提交联系人表单时,它会重定向到“感谢您提交信息”视图,路径为routefoo.com/success 我如何配置它,以便我的代码可以像往常一样重定向到该成功操作,但用户无法直接导航到它?如果页面中没有链接,用户将无法直接访问它。 否则,若用户无法访问它,您也不能通过代码访问它 [HttpGet] public ActionResult MyAction(){ //... return RedirectToAction("Success"); }

我使用最新的MVC,带有属性路由

当用户提交联系人表单时,它会重定向到“感谢您提交信息”视图,路径为route
foo.com/success


我如何配置它,以便我的代码可以像往常一样重定向到该
成功
操作,但用户无法直接导航到它?

如果页面中没有链接,用户将无法直接访问它。

否则,若用户无法访问它,您也不能通过代码访问它

[HttpGet]
public ActionResult MyAction(){
   //...
   return RedirectToAction("Success");
}

[HttpGet]
public ActionResult Success(){
   ViewBag.Result = "thank you for submitting your info";
   return View();
}

如果您希望阻止用户使用url访问操作,则您的操作不得具有[HttpGet],或者必须在您的操作上设置AuthorizeAttribute。为此,请使用ajax请求调用您的操作,并使用Json向客户端发送成功消息

    //Client Side
$.ajax({
    type: "POST",
    url: 'Action URL',
    contentType: "application/json; charset=utf-8",
    data: {id :1},
    dataType: "json",
    success: function(result) {
    alert(result.message);        
    }
    });


[HttpPost]
public ActionResult MyAction(string id){
   return Json(new {message="Your Message"});
}

“如果用户不能访问它,你也不能通过代码访问它”-是的,这是我害怕的。。。这并不是我真正想做的,但我想答案是,“这是做不到的”。所以你的答案是最接近我需要的。