C# ASP.NET核心ASP路由-*帮助程序未正确呈现链接
我有以下路线:C# ASP.NET核心ASP路由-*帮助程序未正确呈现链接,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我有以下路线: [HttpGet("symbols/{symbol}/{slug}/news")] public async Task<IActionResult> News( [FromRoute] string symbol, [FromRoute] string slug, [FromQuery] int perPage, [FromQuery] int page) {
[HttpGet("symbols/{symbol}/{slug}/news")]
public async Task<IActionResult> News(
[FromRoute] string symbol,
[FromRoute] string slug,
[FromQuery] int perPage,
[FromQuery] int page)
{
...
}
但是,这会导致以符号和slug作为查询参数不正确地呈现链接:symbols/news?symbol=aapl&slug=aapl inc&page=11&perPage=5
如何将此链接呈现为
symbols/aapl/apple inc/news?page=2&perPage=20
?以下是一种解决方法:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default1",
pattern: "{controller=Home}/{symbol?}/{slug?}/{action=Index}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
更新:
我找到了另一种方法,不要使用
asp路由页面
。它似乎与razor页面中的asp页面
之类的内容冲突,换成asp路由页面
就可以了。Hi@Marlon,这在我的项目中对我很有效。你的asp.net核心版本是什么?你能分享你的启动吗?cs?@Rena Hi Rena谢谢。我正在使用.NETCore3.1。您希望看到startup cs的哪一部分?endpoints.MapRazorPages();MapControllerRoute(名称:“默认”,模式:“{controller=Home}/{action=Index}/{id?}”);请检查是否没有具有相同名称的其他操作。News
。我添加了以下代码:[HttpPost(“symbols/News”)]public async Task News(string symbol,string slug)
。然后razor视图中的url将呈现与您相同的url。只需更改此post操作的操作名称,你会得到你想要的url。@Rena我做了一个新项目,它也能正常工作。在我真正的项目中,我没有其他与HttpPost同名的操作。当我创建一个没有分页参数page
和perPage
的链接时,新闻链接就起作用了。添加这些分页参数后,所有内容都将成为查询的一部分。。。没有意义。不仅仅是“发布行动”,你还有“获取行动”的相同名称吗?谢谢。这就解决了问题。好像是一只虫子。一只老虫子()
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default1",
pattern: "{controller=Home}/{symbol?}/{slug?}/{action=Index}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});