首页 新闻 搜索 专区 学院

.net core3.1路由配置伪链接该怎么配置

0
悬赏园豆:10 [已解决问题] 解决于 2020-09-23 17:53

endpoints.MapControllerRoute(
name: "blog-list",
pattern: "{controller}/{category?}",
defaults: new { Controller = "Blog", Action = "List" }
);
endpoints.MapControllerRoute(
name: "blog-info",
pattern: "{controller}/{action}/{id?}"
);

比如说我想配置 /blog/58.html

其中58是id

问题补充:

Controller = Blog
Action = Info

小兵程序的主页 小兵程序 | 初学一级 | 园豆:84
提问于:2020-09-22 18:48

对应的 Controller 与 Action 名称是什么?

dudu 2个月前
< >
分享
最佳答案
0

假如 Action 名称是 Info ,可以使用下面的路由配置

endpoints.MapControllerRoute(
    name: "blog-info",
    pattern: "{controller}/{id}.html",
    defaults: new { Controller = "Blog", Action = "Info" }
);
收获园豆:10
dudu | 高人七级 |园豆:38823 | 2020-09-22 22:02

id 要怎么作为参数传入啊,framework mvc 中是这样指定id = UrlParameter.Optional。
但是core中这样指定好像不行

小兵程序 | 园豆:84 (初学一级) | 2020-09-23 09:12

带后缀的伪链接,好像就不走路由了,不知道是不是需要设置什么?

小兵程序 | 园豆:84 (初学一级) | 2020-09-23 09:18

@小兵程序: 答案中的路由就可以传入,我实际测试过了,建议提供一下 Action 的代码

dudu | 园豆:38823 (高人七级) | 2020-09-23 11:32

@dudu:
public class BlogController : Controller
{
public IActionResult List(string category)
{
return View();
}
public IActionResult Info(string id)
{
return View();
}
}

我按照答案中的配置,直接就报了未找到。我的id是个类似于“abcd”这样的字符串,不是纯数字

小兵程序 | 园豆:84 (初学一级) | 2020-09-23 13:06

@小兵程序: string 改为 int

dudu | 园豆:38823 (高人七级) | 2020-09-23 14:57
其他回答(1)
0

@小兵程序 我也遇到了这个问题,在使用UseEndpoints终结点路由时,加了.html
endpoints.MapControllerRoute(
"default",
"{controller}/{action}.html",
new { controller = defaultController, action = defaultAction }
);
路由就报错,AmbiguousMatchException: The request matched multiple endpoints. Matches:
使用老款路由中间件就没问题
难受至极

taoranYYY | 园豆:202 (菜鸟二级) | 2020-09-24 14:22

我这个已经解决了。
比如配置
/aaa/bbb/mun.html(其中mun是参数,Action的接收变量为category,string类型)
endpoints.MapControllerRoute(
name: "blog-info",
pattern: "{aaa}/{bbb}/{category}.html",
defaults: new { Controller = "Blog", Action = "Category" }
);
比如配置
/aaa/bbb/18.html(其中18是参数,Action的接收变量为id,int类型)
endpoints.MapControllerRoute(
name: "blog-info",
pattern: "{aaa}/{bbb}/{id}.html",
defaults: new { Controller = "Blog", Action = "Detail" }
);
你这个配置应该是这样的:
假如你的Controller叫:Product,Action叫 Category
endpoints.MapControllerRoute(
"default",
"Product/Category.html",
new { controller = Product, action = Category}
);
好像controller和action作为链接的一部分时是不能加大括号的,否则就是直接走默认的。
还有就是注意路由的顺序,有的路由可能在前面都已经匹配了,最后都走不到你配的那个路由,结果自然就达不到你想要的效果

支持(0) 反对(0) 小兵程序 | 园豆:84 (初学一级) | 2020-09-24 17:02

@小兵程序: 感谢,您说的这种情况就只能是写死路径么?目前我也放弃探索了,就两张方案
1是继续用回 app.UseMvc(routes =>
{
RouteConfig.RegisterRoutes(routes, app.ApplicationServices);
});

2是用默认的app.UseRouting();
app.UseEndpoints(endpoints =>
endpoints.MapControllerRoute(
"default",
"{controller}/{action}",
new { controller = defaultController, action = defaultAction }
)😉;
然后在各个Controller的基类上加一行[Route()],比如BaseController上加[Route("[controller]/[action].html")],BaseApiController上加[Route("api/[controller]/[action].html")]

目前我选了第二种方法

支持(0) 反对(0) taoranYYY | 园豆:202 (菜鸟二级) | 2020-09-24 17:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册