Добавьте пользовательский параметр в каждую строку запроса, используя фильтр действий MVC - PullRequest
0 голосов
/ 19 апреля 2019

В основном я пытаюсь добавить какой-либо пользовательский параметр запроса в мой запрос браузера с помощью фильтра действий MVC.

Я пытаюсь добавить фильтр действий и написать приведенный ниже код, но получаю ошибку. как: NotSupportedException: коллекция была фиксированного размера.

public class CustomActionFilters : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.RouteData.Values.Keys.Add("customPara");

        filterContext.RouteData.Values.Values.Add("myAllcustomparamter");
                                  //OR
        filterContext.HttpContext.Request.Query.Keys.Add("customPara=myAllcustomparamter"); 
    }
}

Так что, если я напишу в URL: http://localhost:15556/

чем это будет http://localhost:15556? CustomPara = myAllcustomparamter

если открыть любую другую страницу, например http://localhost:15556/image чем это будет http://localhost:15556/image?customPara=myAllcustomparamter ИЛИ http://localhost:15556/image?inbuildparamter=anyvalue это будет http://localhost:15556/image?inbuildparamter=anyvalue&customPara=myAllcustomparamter

1 Ответ

0 голосов
/ 24 апреля 2019

Наконец-то получено решение с использованием перенаправления в фильтр действий.

public class CustomActionFilters : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        string longurl = HttpContext.Current.Request.Url.AbsoluteUri;
        var uriBuilder = new UriBuilder(longurl);
        var query = HttpUtility.ParseQueryString(uriBuilder.Query);
        var myAllcustomparamter = "myAllcustomparamterhere";
        query.Add("customPara", myAllcustomparamter);
        uriBuilder.Query = query.ToString();
        longurl = uriBuilder.ToString();
        if (!filterContext.HttpContext.Request.QueryString.HasValue || (filterContext.HttpContext.Request.QueryString.HasValue && !filterContext.HttpContext.Request.QueryString.Value.Contains("customPara")))
        {
            filterContext.Result = new RedirectResult(longurl);

        }                       
    }
}
...