ASP .Net Core MVC 路由在更改 "applicationUrl" 后在 Visual Studio 2017 中不起作用
ASP .Net Core MVC Routing Not Working in Visual Studio 2017 after changing "applicationUrl"
我创建了一个空的 ASP.NET 核心 Web 应用程序,并将 MVC 服务和配置添加到 "Startup.cs" 文件
并且为了设置我的启动视图 "Users/Create",我将 launchSettings.json 文件中的 "applicationUrl" 更改如下
"applicationUrl": "http://localhost:61541/Users/Create",
第一期
当 运行 visual studio “http://localhost:61541/Users/Create” 时,我得到了预期的 URL 但它显示了 "Home/Index" 视图(默认路由)
解决方案
现在我意识到我不应该更改 "applicationUrl" 值,因为 MVC 认为它是基本根。这就是为什么我得到以下行为
- http://localhost:61541/Users/Create --> 默认为returns
路线 "Home/Index"
- http://localhost:61541/Users/Create/Users/Create --> returns
"Users/Create"
The Main Issue
当我决定将 "applicationUrl" 改回“http://localhost:61541”并导航到“http://localhost:61541/Users/Create”时,我再次获得 "Home/index" 视图(默认路由)
我还得到以下行为:
- http://localhost:61541/Users/Create --> returns "Home/Index"
- http://localhost:61541/Users/Index --> returns "Users/Index"
- http://localhost:61541/Users/Create/Users/Create --> returns "Users/Create"
注意:将解决方案部署到 IIS 后一切正常。但在 Visual Studio 中,这种行为对我来说仍然很奇怪
My Question
I am asking why the routing inside Visual Studio (with IIS express) not working as before? although I changed the "applicationUrl" back to its original value?!
这里是解决代码
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
然后我添加了两个控制器,每个控制器有两个视图
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Create()
{
return View();
}
}
public class UsersController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Create()
{
return View();
}
}
The only workaround that I have now is to add suffix to the
"applicationUrl" to be "http://localhost:61541/web" so I can have
the routing fixed in Visual Studio.
这是结果
- http://localhost:61541/web/Users/Create --> returns "Users/Create"
- http://localhost:61541/web/Users/Index --> returns "Users/Index"
- http://localhost:61541/web/Home/Create --> returns "Home/Create"
- http://localhost:61541/web --> returns "Home/Index"(默认路由)
注意:此解决方案可能会导致 Ajax 调用调试问题。
这意味着您可能无法在服务器端调试 Ajax 调用。但是为了避免这个问题,你可以用像'/web/...'
这样的后缀来启动 Ajax Url
看起来每次您对 Visual Studio 中的应用程序 url 进行更改时,它都会写入 [项目目录].vs\config\applicationhost.config。它会在您的 "site" 节点下添加一个新的 "application" 节点。在我的例子中,根据您的建议,它是 /users,然后是 /web。它只是不断添加新的应用程序路径,其中 "virtualDirectory" 个节点具有 path="/"。它不会删除其中任何一个。每个新的 "application" 路径都将起作用。但是,如果您提供的路径是控制器,则会造成混淆。
从 VS 用户界面看来,如果您更改 App Url,您似乎可以合理地假设您正在更改单个值,而不是添加到有效值列表中。
无论如何,如果您编辑 applicationhost.config 以删除您网站下不需要的 "application",它应该会像以前一样工作。
我创建了一个空的 ASP.NET 核心 Web 应用程序,并将 MVC 服务和配置添加到 "Startup.cs" 文件
并且为了设置我的启动视图 "Users/Create",我将 launchSettings.json 文件中的 "applicationUrl" 更改如下
"applicationUrl": "http://localhost:61541/Users/Create",
第一期
当 运行 visual studio “http://localhost:61541/Users/Create” 时,我得到了预期的 URL 但它显示了 "Home/Index" 视图(默认路由)
解决方案
现在我意识到我不应该更改 "applicationUrl" 值,因为 MVC 认为它是基本根。这就是为什么我得到以下行为
- http://localhost:61541/Users/Create --> 默认为returns 路线 "Home/Index"
- http://localhost:61541/Users/Create/Users/Create --> returns "Users/Create"
The Main Issue
当我决定将 "applicationUrl" 改回“http://localhost:61541”并导航到“http://localhost:61541/Users/Create”时,我再次获得 "Home/index" 视图(默认路由)
我还得到以下行为:
- http://localhost:61541/Users/Create --> returns "Home/Index"
- http://localhost:61541/Users/Index --> returns "Users/Index"
- http://localhost:61541/Users/Create/Users/Create --> returns "Users/Create"
注意:将解决方案部署到 IIS 后一切正常。但在 Visual Studio 中,这种行为对我来说仍然很奇怪
My Question
I am asking why the routing inside Visual Studio (with IIS express) not working as before? although I changed the "applicationUrl" back to its original value?!
这里是解决代码
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
然后我添加了两个控制器,每个控制器有两个视图
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Create()
{
return View();
}
}
public class UsersController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Create()
{
return View();
}
}
The only workaround that I have now is to add suffix to the "applicationUrl" to be "http://localhost:61541/web" so I can have the routing fixed in Visual Studio.
这是结果
- http://localhost:61541/web/Users/Create --> returns "Users/Create"
- http://localhost:61541/web/Users/Index --> returns "Users/Index"
- http://localhost:61541/web/Home/Create --> returns "Home/Create"
- http://localhost:61541/web --> returns "Home/Index"(默认路由)
注意:此解决方案可能会导致 Ajax 调用调试问题。 这意味着您可能无法在服务器端调试 Ajax 调用。但是为了避免这个问题,你可以用像'/web/...'
这样的后缀来启动 Ajax Url看起来每次您对 Visual Studio 中的应用程序 url 进行更改时,它都会写入 [项目目录].vs\config\applicationhost.config。它会在您的 "site" 节点下添加一个新的 "application" 节点。在我的例子中,根据您的建议,它是 /users,然后是 /web。它只是不断添加新的应用程序路径,其中 "virtualDirectory" 个节点具有 path="/"。它不会删除其中任何一个。每个新的 "application" 路径都将起作用。但是,如果您提供的路径是控制器,则会造成混淆。
从 VS 用户界面看来,如果您更改 App Url,您似乎可以合理地假设您正在更改单个值,而不是添加到有效值列表中。
无论如何,如果您编辑 applicationhost.config 以删除您网站下不需要的 "application",它应该会像以前一样工作。