如何使用ASP.NET Core重写URL

时间:2018-09-04 02:14:14

标签: asp.net asp.net-mvc asp.net-core asp.net-core-2.0

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

这是我网站的结构

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,所以如何隐藏这些东西?

谢谢

2 个答案:

答案 0 :(得分:2)

  

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

如果您想使用URL Excel Action路由到Excel Controller中的ExcelOnly,可以尝试如下的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操作。

答案 1 :(得分: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?}");
        });
    }