【问题标题】:asp.net mvc RedirectToRouteResult exclude hash valueasp.net mvc RedirectToRouteResult 排除哈希值
【发布时间】:2015-08-11 15:04:46
【问题描述】:
public class AuthorizeUserAttribute : AuthorizeAttribute
{   
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(
            "Error",            
            new RouteValueDictionary(
                        new
                        {
                            controller = "Error",
                            action = "Index"
                        })
                    );
    }
}

在 RouteConfig 中我添加了新路由:

routes.MapRoute(
                name: "Error",
                url: "Error#/Error",
                defaults: new { controller = "Error", action = "Index" }
            );

如果我这样打开网址: http://localhost:52956/Home#/HomeActionHandleUnauthorizedRequest 被触发,那么 url 结构是这样的:http://localhost:52956/Error%23/Error#/HomeAction

如何重定向到http://localhost:52956/Error#/Error

PS 应用是使用 angularJS 和 asp.net mvc 构建的

【问题讨论】:

    标签: asp.net-mvc angularjs hash routing


    【解决方案1】:

    片段不是 .NET 路由的一部分,它们只能使用 UrlHelper(驱动 ActionLink 和 RouteLink)应用。因此,您可以使用UrlHelper 来做到这一点。

    filterContext.Result = new RedirectResult(
        UrlHelper.GenerateUrl(
            routeName: "Error", 
            actionName: "Index", 
            controllerName: "Error", 
            protocol: null, 
            hostName: null, 
            fragment: "/Error", 
            routeValues: null, 
            routeCollection: null, 
            requestContext: filterContext.RequestContext, 
            includeImplicitMvcValues: false));
    

    或者,您可以明确指定 URL。

    filterContext.Result = new RedirectResult("/Error#/Error");
    

    但无论哪种方式,您都需要修正路线。浏览器不需要将 URL 的片段部分发送回服务器(其中许多不需要),因此无法可靠地匹配它。你能做的最好的就是匹配没有片段的 URL 的路径。

    routes.MapRoute(
        name: "Error",
        url: "Error",
        defaults: new { controller = "Error", action = "Index" }
    );
    

    这是假设你的应用程序中没有其他 URL 是/Error,否则你会发生冲突。

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多