Asp.net 如何使用特定路由配置重定向到/Account/Login

Asp.net 如何使用特定路由配置重定向到/Account/Login,asp.net,asp.net-mvc,routes,Asp.net,Asp.net Mvc,Routes,我有一个场景,我的路线都以国家代码作为前缀,例如,国家代码用于在会话中存储特定于国家的信息。除了未经身份验证的请求(例如,在会话过期后轮询AJAX请求fire,或者用户在部署期间和之后长时间保持浏览器打开)之外,这一切都可以正常工作,此时系统将尝试重定向到/Account/Login,而不是特定于国家/地区的URL,例如,/US/Account/Login。由于/Account/Login不是有效的路由,系统抛出路径“/Account/Login”的控制器找不到或未实现IController。异

我有一个场景,我的路线都以国家代码作为前缀,例如,国家代码用于在会话中存储特定于国家的信息。除了未经身份验证的请求(例如,在会话过期后轮询AJAX请求fire,或者用户在部署期间和之后长时间保持浏览器打开)之外,这一切都可以正常工作,此时系统将尝试重定向到
/Account/Login
,而不是特定于国家/地区的URL,例如,
/US/Account/Login
。由于
/Account/Login
不是有效的路由,系统抛出
路径“/Account/Login”的控制器找不到或未实现IController。
异常

一等奖是能够重定向到特定国家/地区,例如
/US/Account/Login
,但我无法使用
/Account/Login
。如果我为
/Account/Login
添加路由,它将被
DefaultCountryCode
路由取代(如果在路由配置中位于下方),或者它将取代
DefaultCountryCode
路由(如果在路由配置中位于下方)

路线配置

// if placed here this supersedes DefaultCountryCode route
//routes.MapRoute("Account", "/Account/Login");

// e.g. http://www.example.com/US/Home
routes.MapRoute("DefaultCountryCode", "{countrycode}/{controller}/{action}/{id}",
    new
    {
        controller = "Home",
        action = "Index",
        id = UrlParameter.Optional
    });

// if placed here this gets superseded by DefaultCountryCode route
//routes.MapRoute("Account", "/Account/Login");
你调查过了吗?您可以创建控制器并执行两个操作-


当您拥有“US/Accounts/Login/{id}”时将调用一个,另一个可以拥有“Accounts/Login”属性。

创建自定义授权属性,并将其添加到控制器或全局注册:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
      base.OnAuthorization(filterContext);
      if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
      {
        filterContext.Result = new RedirectToRouteResult(
          new RouteValueDictionary {
          { "controller", "Account" },
          { "action", "Login" },
          { "countrycode", /* extract it from: filterContext.HttpContext.Request.RawUrl or somewhere from context */ }
        });
      }
    }
}

在Startup.Auth.cs文件中,您的登录路径有哪些设置?