【问题标题】:ASP .Net Core MVC Routing Not Working in Visual Studio 2017 after changing "applicationUrl"更改“applicationUrl”后,ASP .Net Core MVC 路由在 Visual Studio 2017 中不起作用
【发布时间】:2018-12-08 23:56:02
【问题描述】:

我创建了一个空的 ASP.NET Core Web 应用程序,并将 MVC 服务和配置添加到“Startup.cs”文件中

为了设置我的启动视图“用户/创建”,我已将 launchSettings.json 文件中的“applicationUrl”更改如下

"applicationUrl": "http://localhost:61541/Users/Create",

第一期

我在运行视觉工作室“http://localhost:61541/Users/Create”时得到了预期的 URL,但它显示了“主页/索引”视图(默认路由)

解决方案

现在我意识到我不应该更改“applicationUrl”值,因为 MVC 认为它是基本根。这就是为什么我得到以下行为

主要问题

当我决定将“applicationUrl”改回“http://localhost:61541”并导航到“http://localhost:61541/Users/Create”时,我再次获得了“Home/index”视图(默认路由)

我也有以下行为:

注意:将解决方案部署到 IIS 后,一切正常。但在 Visual Studio 中,我的行为仍然很奇怪

我的问题

我在问为什么 Visual Studio 中的路由(使用 IIS express)不能像以前那样工作?虽然我把“applicationUrl”改回原来的值了?!

这里是解决方案代码

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();
    }
}

【问题讨论】:

    标签: c# visual-studio-2017 asp.net-core-mvc asp.net-mvc-routing asp.net-core-2.0


    【解决方案1】:

    看起来每次您在 Visual Studio 中更改应用程序 url 时,它都会写入 [项目目录].vs\config\applicationhost.config。它在您的“站点”节点下添加了一个新的“应用程序”节点。根据您的建议,就我而言,它是 /users,然后是 /web。它只是不断添加具有路径 =“/”的“virtualDirectory”节点的新应用程序路径。它不会删除任何一个。每个新的“应用程序”路径都将起作用。但是,如果您提供的路径是一个控制器,那就会令人​​困惑。

    从 VS 用户界面看来,如果您更改 App Url,您正在更改单个值,而不是添加到有效值列表中,这似乎是合理的假设。

    无论如何,如果您编辑 applicationhost.config 以删除您不想要的站点下的“应用程序”,它应该可以像以前一样工作。

    【讨论】:

    • 这对我有用!谢谢 !当您更改项目属性上的 App URL 并从 IIS Express 开始时,它会添加一个节点。如果该节点与您的控制器具有相同的名称,则该节点会处理请求并且不会将其冒泡到基节点。
    • 为我工作,谢谢。如果您希望您的核心应用程序的根保留“/”,但想以类似以下内容的方式调试您的项目:'/admin/user',请务必始终将此 Url 片段添加到 Project->Properties-Debug 的末尾-> 启动浏览器条目,而不是应用 URL。
    【解决方案2】:

    我现在唯一的解决方法是在 "applicationUrl" 为 "http://localhost:61541/web" 所以我可以拥有 在 Visual Studio 中修复的路由。

    这是结果

    注意:此解决方案可能会导致 Ajax 调用调试问题。 这意味着您可能无法在服务器端调试 Ajax 调用。但是为了避免这个问题,您可以使用像“/web/...”这样的后缀来启动 Ajax Url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2017-04-06
      • 2013-09-01
      • 2018-11-07
      相关资源
      最近更新 更多