我是桌面开发人员。但我需要学习如何使用ASP.net Core进行Web开发。所以我现在在这里提问。如何正确重写我的网站的URL:
这是我网站的结构
这是我添加链接到我的布局页面的方式
<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所以我该如何隐藏这些东西?
谢谢
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
动作。
在此我提到第一个问题的解决方案。请在“布局”页面中输入以下代码
<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?}");
});
}