通常(例如在我的本地主机上),[Authorize]
正确地重定向到LoginPath
中指定的CookieAuthenticationOptions
。
但是,当我部署到暂存站点(staging.mysite.com
)时,授权重定向似乎放错了部分URL。
就我而言,它将:
http://staging/Account.mysite.com/Login?ReturnUrl=%2FHome%2FAuthorize
何时该去:
http://staging.mysite.com/Account/Login?ReturnUrl=%2FHome%2FAuthorize
该应用程序非常基本:
//Startup.cs
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
options.AccessDeniedPath = "/Home/Unauthorized";
options.ReturnUrlParameter = "ReturnUrl";
});
services.AddMvc()
//....
app.UseMvc();
我的控制器:
//HomeController.cs
[Route("[controller]/[action]")]
public class HomeController : Controller
{
[Authorize]
public IActionResult Authorize()
{
return Ok("You are authorized");
}
}
//AccountController.cs
[Route("[controller]/[action]")]
public class AccountController : Controller
{
public IActionResult Login()
{
return View(new LoginViewModel());
}
}
有人看到我要去哪里了吗?
更新:
奇怪的是,如果我进行以下更改,它会起作用。因此,问题似乎在于在路由中指定了操作?
options.LoginPath = "/Login"; //I removed /Account
[HttpGet("/Login")] //I added the "/Login" template
public IActionResult Login()
答案 0 :(得分:2)
尝试
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
编辑 删除
options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");
并添加
options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");
答案 1 :(得分:2)
您是否定义了这样的路线?
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
如果未将其添加到RouteConfig.cs中。 或者,您可以直接使用[Route(“ route”)]定义路线。
答案 2 :(得分:0)
发现了问题。
问题不是不是,是因为asp.net核心或我的应用程序。
问题出在我们在IIS中使用的重定向正则表达式。