C# MVC5(Asp.Net4.5.2)-重定向到操作执行';在一个案例中不返回
在我的帐户控制器中,在登录操作中,具有以下代码:C# MVC5(Asp.Net4.5.2)-重定向到操作执行';在一个案例中不返回,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,在我的帐户控制器中,在登录操作中,具有以下代码: case "Sucess": string rule = CheckRule(model.username, model.Password); Response.SetCookie(SetAuthCookie(model.username, model.RememberMe, rule)); re
case "Sucess":
string rule = CheckRule(model.username, model.Password);
Response.SetCookie(SetAuthCookie(model.username, model.RememberMe, rule));
return RedirectToAction("Index", rule);
在checkrule中,我返回另一个控制器名称的字符串,其中包括Admin和BasicUser,以下是这些控制器的代码:
{
[Authorize]
public class AdminController : Controller
{
private bool attAuthor = isAuthorized();
private bool attAuth = isAuthenticated();
private string rule = returnrule();
// GET: Admin
public ActionResult Index()
{
if (!attAuthor)
{
return RedirectToAction("erro401",rule);
}
else
{
return View();
}
}
public ActionResult erro401()
{
return View("erro401");
}
}
以及:
}
在RouteConfig中:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "BasicUser",
url: "{controller}/{action}/{id}",
defaults: new { controller = "BasicUser", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Admin",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);
如果我使用管理员用户登录,它可以正常工作,但是对于基本用户,如果我输入控制器地址,navagador不会重定向到路由,只是登录屏幕。
我添加了一个标记html来查看cookie用户数据,效果很好(show de BasicUserRule)
抱歉,如果我的问题不太清楚,我是新手…我认为不需要您的地图路线,因为您只需重定向到视图。因为两个MapRoutes具有相同的结构,它将只保留最后一个,即Admin。我认为不需要您的MapRoutes,因为您只需重定向到视图。由于两个MapRoutes具有相同的结构,因此它将只保留最后一个MapRoutes,即Admin。路由存在两个问题:
HttpStatusCode.Unauthorized
响应时,应自动请求您的登录页面。若你们希望你们的主页只被授权用户访问,那个么也要从主页返回未经授权的响应。就是这样
这是一个非常好的主意,请阅读更多有关MVC(路由、控制器、身份验证、授权)工作原理的信息。否则,你可能会得到一个远离安全的应用程序。StackOverflow在解决个别问题方面很好,但不能帮助您看到全局。你仍然需要了解东西是如何工作的"Admin/{action}/{id}", new { controller = "Admin" }
"Basic/{action}/{id}", new { controller = "Basic" }
因此,如果URL以“Basic”开头,Admin将不匹配,反之亦然您可以使用了解路由匹配的工作原理以及请求如何映射到路由。路由存在两个问题:
HttpStatusCode.Unauthorized
响应时,应自动请求您的登录页面。若你们希望你们的主页只被授权用户访问,那个么也要从主页返回未经授权的响应。就是这样
这是一个非常好的主意,请阅读更多有关MVC(路由、控制器、身份验证、授权)工作原理的信息。否则,你可能会得到一个远离安全的应用程序。StackOverflow在解决个别问题方面很好,但不能帮助您看到全局。你仍然需要了解东西是如何工作的"Admin/{action}/{id}", new { controller = "Admin" }
"Basic/{action}/{id}", new { controller = "Basic" }
因此,如果URL以“Basic”开头,Admin将不匹配,反之亦然routes.MapRoute(
name: "BasicUser",
url: "BasicUser/{action}/",
defaults: new { controller = "BasicUser", action = "Index" }
);
routes.MapRoute(
name: "Admin",
url: "Admin/{action}/",
defaults: new { controller = "Admin", action = "Index"}
);
这解决了一切。
我听从了他的建议,寻求更多的信息,这里有一些有趣的链接:
谢谢镇静药
我的问题是路由,我在url参数中使用控制器设置了de route:
routes.MapRoute(
name: "BasicUser",
url: "BasicUser/{action}/",
defaults: new { controller = "BasicUser", action = "Index" }
);
routes.MapRoute(
name: "Admin",
url: "Admin/{action}/",
defaults: new { controller = "Admin", action = "Index"}
);
这解决了一切。
我听从了他的建议,寻求更多的信息,这里有一些有趣的链接:
你好,镇静,谢谢你的回答,我会修复这些路由,但是
HttpStatusCode.Unauthorized
,我可以在哪里配置帐户登录的自动响应?我将登录url放在Web.config的FormsAuthentication中:@RogérioFerreira,这就足够了。这是默认行为。如果您想在操作之前强制登录到,也可以使用[Authorize]
属性(而不是处理HTTP结果)。嗨,镇静,谢谢回答,我会修复这些路由,但是HttpStatusCode.Unauthorized
,我可以在哪里为帐户登录配置此自动响应?我将登录url放在Web.config的FormsAuthentication中:@RogérioFerreira,这就足够了。这是默认行为。如果要在执行操作之前强制登录到,也可以使用[Authorize]
属性(而不是处理HTTP结果)。我看到了我的应用程序的其他解决方案,我将不得不重做一些事情。我看到了我的应用程序的其他解决方案,我将不得不重做一些事情。