如何使用asp.net核心重写URL

问题描述 投票:1回答:2

我是桌面开发人员。但我需要学习如何使用ASP.net Core进行Web开发。所以我现在在这里提问。如何正确重写我的网站的URL:

这是我网站的结构

enter image description here

这是我添加链接到我的布局页面的方式

<li><a asp-action="Index" asp-controller="Home">Home</a></li>
<li><a asp-action="Excel" asp-controller="Excel">Excel</a></li>

想要做的是重写这个URL

http://localhost:64419/Excel/Excel

目前我正在使用这个中间件

https://www.nuget.org/packages/Microsoft.AspNetCore.Rewrite/

这是我的代码

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseDeveloperExceptionPage();
            app.UseStatusCodePages();
            app.UseStaticFiles();
            app.UseMvc(routes =>
            {
                var rewrite = new RewriteOptions()

                .AddRewrite(@"ExcelOnly", "Excel/Excel", skipRemainingRules: false);

                app.UseRewriter(rewrite);

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}"
                    );

                routes.MapRoute(
                   name: "excel",
                   template: "{controller=Excel}/{action=Excel}"
                   );
            });
        }

由于上面的代码,我能够将URL重写为

http://localhost:64419/ExcelOnly

只需在URL中键入链接即可。

但是当我点击布局页面中的链接时。页面已加载,但它使用链接http://localhost:64419/Excel/Excel如何正确重写URL。

我需要搜索什么东西。我找不到解决方案。也许我使用了错误的搜索词。所以我决定在这里问一下。

谢谢。

更新:

我能够在我想要的URL中重定向页面

用这个代码

var rewrite = new RewriteOptions()
                .AddRedirect("Excel/Excel", "ExcelOnly")
                .AddRewrite(@"ExcelOnly", "Excel/Excel", skipRemainingRules: false);

                app.UseRewriter(rewrite);

但这是一个好习惯吗?在我的每个重定向中,我总是需要Controller和Action。因此,如果我更改了动作名称,我还需要更改重定向并重写。

另一个问题。当我将鼠标悬停在链接中它显示路径http://localhost:64419/Excel/Excel所以我该如何隐藏这些东西?

谢谢

asp.net asp.net-mvc asp.net-core asp.net-core-2.0
2个回答
2
投票

URL重写可能会降低应用程序的性能。在可行的情况下,您应该限制规则的数量和复杂性。

如果您想通过URL Excel Action路线到Excel ControllerExcelOnly,您可以试试下面的Route

    public class ExcelController : Controller
{
    [Route("ExcelOnly")]
    public IActionResult Excel()
    {
        return View();
    }
}

它将生成<li><a asp-action="Excel" asp-controller="Excel">Excel</a></li>

<a href="/ExcelOnly">Excel</a>

当你输入http://localhost:64419/ExcelOnly时,它将在Excel控制器中路由到Excel动作。


0
投票

在此我提到第一个问题的解决方案。请在“布局”页面中输入以下代码

 <li> <a asp-area="" asp-controller="Excel" asp-action="Excel">Excel</a></li>

将以下代码放在startup.cs页面中

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
© www.soinside.com 2019 - 2024. All rights reserved.