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#/HomeAction和HandleUnauthorizedRequest
,然后网址结构如下所示:http://localhost:52956/Error%23/Error#/HomeAction
如何重定向到http://localhost:52956/Error#/Error
PS应用程序是使用angularJS和asp.net mvc
构建的答案 0 :(得分:0)
片段不是.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" }
);
这假设您的应用中没有其他网址/Error
,否则您将发生冲突。