Search code examples
asp.net-coreroutesasp.net-mvc-routing

Find route variables from attribute


I would like to autofill ViewContext with 1 parameter of routes, however sometimes it is in query, sometimes it is in Url.

When in query, it is easy to get the parameter using req.Query.TryGetValue(key, out StringValues val). However I am looking for a way to capture the route parameter when it is like this:

[PrefillViewContext("postId")]
[HttpGet("/Post/{postId}")]
public IActionResult DisplayPost(Guid postId) {}

Is there a way to get this postId value outside of the method body, and use it in the attribute just above? (or in an attribute at class level)


Solution

  • You could get action parameters using ActionExecutingContext by inheriting ActionFilterAttribute.You could get all RouteData from the context.

    public class PrefillViewContextAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var postId = context.ActionArguments["PostId"];
        }
    
    }