Asp.net mvc How to prevent browser from calling an action method?
Try making this Index controller action as private
. A method with private
access modifier should not be accessible from outside class.
And then, rahter than calling RedirectToAction
from AddToCart call it as simple method like below:
private ActionResult Index()
{
//some stuff here
return View(viewModel);
}
public ActionResult AddToCart(int id)
{
return Index();
}
You could use the [ChildActionOnly]
attribute on your action method to make sure it's not called directly, or use the ControllerContext.IsChildAction
property inside your action to determine if you want to redirect.
For example:
public ActionResult Index()
{
if(!ControllerContext.IsChildAction)
{
//perform redirect here
}
//some stuff here
return View(viewModel);
}
If you can't make the Index action a child action, you could always check the referrer, understanding that it's not foolproof and can be spoofed. See:
How do I get the referrer URL in an ASP.NET MVC action?