There's a lot of information for building Uris from Controller and Action names, but how can I do this the other way around?
Basically, all I'm trying to achieve is to get the Controller and Action names from the referring page (i.e. Request.UrlReferrer). Is there an easy way to achieve this?
Actions are public methods in an MVC controller, that respond to a URL request. Action Selectors are attributes that can be applied to action methods and are used to influence or control which action method gets invoked in response to a request.
I think this should do the trick:
// Split the url to url + query string var fullUrl = Request.UrlReferrer.ToString(); var questionMarkIndex = fullUrl.IndexOf('?'); string queryString = null; string url = fullUrl; if (questionMarkIndex != -1) // There is a QueryString { url = fullUrl.Substring(0, questionMarkIndex); queryString = fullUrl.Substring(questionMarkIndex + 1); } // Arranges var request = new HttpRequest(null, url, queryString); var response = new HttpResponse(new StringWriter()); var httpContext = new HttpContext(request, response) var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); // Extract the data var values = routeData.Values; var controllerName = values["controller"]; var actionName = values["action"]; var areaName = values["area"];
My Visual Studio is currently down so I could not test it, but it should work as expected.
To expand on gdoron's answer, the Uri
class has methods for grabbing the left and right parts of the URL without having to do string parsing:
url = Request.UrlReferrer.GetLeftPart(UriPartial.Path); querystring = Request.UrlReferrer.Query.Length > 0 ? uri.Query.Substring(1) : string.Empty; // Arranges var request = new HttpRequest(null, url, queryString); var response = new HttpResponse(new StringWriter()); var httpContext = new HttpContext(request, response) var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); // Extract the data var values = routeData.Values; var controllerName = values["controller"]; var actionName = values["action"]; var areaName = values["area"];
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With