A few things here:
You no longer need to end your SurfaceController controller name, just inherit from SurfaceController .
Also, you do not need the path prefix /Umbraco/surface/ , you should only have access to the Index () action in /my/ if your controller was called by MyController .
Edit:
Assuming you want to serve pages from your controller, you need to make changes to the AppSetting entry in web.config to include the path to the controller.
<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/my" />
You will also need to register a route specifically for your controller from global.asax:
routes.MapRoute( name: "Default", url: "my/{action}/{id}", defaults: new { action = "Index", id = UrlParameter.Optional } );
It is important that this is specific to your controller, as you do not want it to override any Umbraco routing.
source share