Как узнать запрошенный маршрут - PullRequest
0 голосов
/ 15 марта 2012

Я пишу пользовательский класс Route и затем использую return RedirectToRoute("MyRouteName").

Как я могу узнать, что мой собственный маршрут был специально запрошен в классе маршрута?

public bool IsRouteRequested()
{}

Вернет true для RedirecToRoute("MyRoute") и false для RedirectToAction("SomeAction", "SomeController").

Можно ли также определить, вызывается ли RedirectToAction из области?

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Вы можете просто определить значение маршрута следующим образом:

return RedirectToRoute("myRoute", new { myVal = "val" });

и затем проверить, доступно ли оно для ex в GetVirtualPath

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
         if(values["myVal"] != null)....
0 голосов
/ 15 марта 2012

Возможно, вы служите, мне не очень нравится, но это единственное, о чем я могу думать:

public static class RedirectToRouteResultExtensions
{
    private static IDictionary<RedirectToRouteResult, bool> typeRoute;

    public static RedirectToRouteResult SetRouteRequested(this RedirectToRouteResult redirectToRouteResult, bool value)
    {
        if (typeRoute == null)
        {
            typeRoute = new Dictionary<RedirectToRouteResult, bool>();
        }

        typeRoute[redirectToRouteResult] = value;

        return redirectToRouteResult;
    }

    public static bool IsRouteRequested(this RedirectToRouteResult redirectToRouteResult)
    {
        if (typeRoute == null)
        {
            return false;
        }

        return typeRoute.ContainsKey(redirectToRouteResult)
                    ? typeRoute[redirectToRouteResult]
                    : false;
    }
}

Пример:

return RedirectToRoute("MyRouteName").SetRouteRequested(true);

return RedirectToAction("SomeAction", "SomeController");

* Редактировать решение II*

До return RedirectToRoute("MyRouteName") Вы можете добавить информацию в заголовок ответа:

HttpContext.Response.Headers.Add("CustomRoute", "1");
return RedirectToRoute("MyRouteName");

...

public bool IsRouteRequested()
{
   if (HttpContext.Response.Headers["CustomRoute"] != null &&
       HttpContext.Response.Headers["CustomRoute"] == "1")
       return true;  

   return false;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...