CBr*_*eze 5 asp.net-mvc asp.net-core
我有以下的Controller&Action我想要当用户进入我的web应用程序将加载的第一页:
[Route("auth")]
public class AuthController : Controller
{
[Route("signin")]
public IActionResult SignIn(bool signInError)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在我的app.UseMvc选项中执行以下操作:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=auth}/{action=signin}/");
});
Run Code Online (Sandbox Code Playgroud)
但是,当我启动webapp时,它只是导航至http://localhost:52608/。
如果我键入http://localhost:52608/auth/signin?ReturnUrl=%2F网页,则将在用户启动Webapp时正确地加载到该页面上。
我的问题是,如何设置它以便用户打开Web应用程序后可以立即导航到此页面?
混合路由对于某些控制器和动作使用基于约定的路由,而对于另一些控制器则使用属性路由,这是完全有效的。但是,ASP.NET Core MVC不允许在同一操作中存在基于约定的路由和属性路由。如果操作使用属性路由,则任何基于约定的路由都不能映射到该操作。 有关更多信息,请参见ASP.NET Core文档。
因此,如果要使用属性路由,则无法在基于约定的路由中映射默认路径。
如果需要在此控制器中使用属性路由,则可以在web.congig文件中添加重定向操作。或者只是从该操作中删除属性路由,它将起作用:
public class AuthController : Controller
{
public IActionResult SignIn(bool signInError)
{
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
最简单的解决方案:使用重定向操作添加新控制器,例如:
public class HomeController : Controller
{
public IActionResult Index()
{
return new RedirectToActionResult("SignIn", "Auth", new {signInError = false});
}
}
Run Code Online (Sandbox Code Playgroud)
并将默认路由添加到该控制器
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=home}/{action=index}/");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3711 次 |
| 最近记录: |