In a Sitecore site you need to register your custom routes in a specific way so that Sitecore does not loose them when it initialises it's own routes. Specifically you need to register your custom route in the initialize pipeline. I'm guessing that perhaps your not doing this and that is why your route is not working.
If you had a controller like so:
public class MyController : Controller
{
[HttpGet]
public ActionResult MyAction()
{
}
[HttpPost]
public ActionResult MyAction(string field1, string field2)
{
}
}
You would also need something like the following to register the route:
public class RegisterCustomRoute
{
public virtual void Process(PipelineArgs args)
{
Register();
}
public static void Register()
{
RouteTable.Routes.MapRoute("CustomRoute", "custom/myroute/{controller}/{action}/{id}");
}
}
And a config patch like so:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<pipelines>
<initialize>
<processor type="MyNamespace.RegisterCustomRoute, MyAssembly" patch:before="processor[@type='Sitecore.Mvc.Pipelines.Loader.InitializeRoutes, Sitecore.Mvc']" />
</initialize>
</pipelines>
</sitecore>
</configuration>
There is more info on this here:
https://kb.sitecore.net/articles/700677
Requested document not found when using MVC routes