[英]How to rewrite URL in .net core?
I would like this mecanism: 我想要这种机制:
I tried to modify startup.cs
我试图修改
startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
var rewrite = new RewriteOptions()
.AddRewrite(@"([a-zA-Z0-9\-]*)", "pro/details/$1", skipRemainingRules: true);
app.UseRewriter(rewrite);
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
It works only for the second bullet. 它仅适用于第二个项目符号。
What's wrong with my code? 我的代码有什么问题? And how to achieve my goal?
以及如何实现我的目标?
In order to achieve my goal, I did following stuff : 为了实现我的目标,我做了以下工作:
First I modify my startup.cs like : 首先,我将我的startup.cs修改为:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "ProfessionnalAlias",
template: "{id?}",
defaults: new { controller = "Professionnals", action = "DetailsAlias" });
});
So I created a new route, after default route in order to target special action : DetailsAlias (see below) 因此,我在 默认路由 之后创建了一个新路由,以针对特殊操作:DetailsAlias(请参见下文)
And I also modify my ProfessionnalsController like : 而且我还像这样修改了ProfessionnalsController:
/// <summary>
/// This action have an Integer parameter and redirect to action with alias
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var professional = await _context.professional
.SingleOrDefaultAsync(m => m.id == id);
if (professional == null)
{
return NotFound();
}
RedirectResult redirectResult = new RedirectResult("/"+professional.alias);
return redirectResult;
}
/// <summary>
/// This action show detail view from alias parameter
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<IActionResult> DetailsAlias(string id)
{
if (string.IsNullOrEmpty(id))
{
return NotFound();
}
var professional= await _context.professional.SingleOrDefaultAsync(m => m.alias == id);
if (professional== null)
{
return NotFound();
}
return View("Details", professional);
}
Conclusion : 结论:
Thanks for help 感谢帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.