如何解决Net Core MVC更改URL路由参数为#片段
我希望我的最终route参数在页面加载后变成URL片段。
所以,如果我提交如下网址:
https://mysite/controller/param1/param2
它通过我设置的路线命中了我的控制器方法
public ActionResult Index(string param1,string param2)
https://mysite/controller/param1#param2
解决方法
您可以使用RedirectToAction()
重载之一,该重载采用片段参数来生成带有片段的URL:
公共虚拟RedirectToActionResult RedirectToAction(字符串actionName,字符串controllerName,字符串片段);
但是首先,您需要设置一条路由,以将诸如https://mysite/controller/param1/param2
之类的请求映射到可以从URL中删除那些参数并调用RedirectToAction()
重载的东西。我创建了一个名为FragmentController
的单独控制器,并在其中声明了一个名为Process()
的方法:
// Startup.cs
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
...
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "fragment",pattern: "fragment/{controllerName}/{actionName}/{fragmentName}",defaults: new { controller = "fragment",action = "process" });
endpoints.MapControllerRoute(...);
});
}
看到新的路由映射正在寻找以/fragment
开头,后跟3个参数的任何请求,并且这些参数将正确映射到Process()
中的FragmentController
操作:
// FragmentController.cs
public class FragmentController : Controller
{
public IActionResult Process(string controllerName,string actionName,string fragmentName)
{
// You can do anything you want with those parameters,i.e.,validations
return RedirectToAction(actionName,controllerName,fragmentName);
}
}
就是这样。因此,如果收到https://localhost:44370/fragment/home/privacy/heading1
之类的请求
它将正确映射到片段控制器的流程操作:
调用RedirectToAction()
重载后,它将正确地重定向到控制器和所需的操作,并带有片段:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。