Asp.net core Asp.net核心2.1路由问题
我在asp.net core 2.1中尝试了一些路由,但遇到了路由问题 Startup.cs->配置方法Asp.net core Asp.net核心2.1路由问题,asp.net-core,routes,.net-core,asp.net-routing,asp.net-core-2.1,Asp.net Core,Routes,.net Core,Asp.net Routing,Asp.net Core 2.1,我在asp.net core 2.1中尝试了一些路由,但遇到了路由问题 Startup.cs->配置方法 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{Controller=Demo}/{Action=Index}/{id?}"); }); DemoController.cs [Route("
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{Controller=Demo}/{Action=Index}/{id?}");
});
DemoController.cs
[Route("demo")]
public class DemoController : Controller
{
[Route("")]
[Route("index")]
[Route("MyDemoPage")]
[Route("~/")]
public IActionResult Index()
{
return View();
}
[Route("demo2/{id}")]
[Route("cj/{id}")]
public IActionResult Demo2(int id)
{
ViewBag.id = id;
return View("Demo2");
}
[Route("demo3/{id1}/{id2}")]
[Route("cc/{id1}/{id2}")]
public IActionResult Demo3(int id1,string id2)
{
ViewBag.id = id1;
ViewBag.id2 = id2;
return View("Demo3");
}
}
Index.cshtml页面
@*[Route("demo2/{id}")]*@
<br />
<a asp-controller="demo" asp-action="demo2" asp-route-id="123">Demo2</a>
@*Above Tag renders :> <a href="/demo/cj/123">Demo2</a>*@ Link 1
<br />
@*[Route("cj/{id}")]*@
<br />
<a asp-controller="demo" asp-action="cj" asp-route-id="07">Demo2 via route CJ</a>
@*Above Tag renders :> <a href="/demo/cj/07">Demo2 via route CJ</a>*@ Link 2
<br />
@*[Route("demo3/{id1}/{id2}")]*@
<br />
<a asp-controller="demo" asp-action="demo3" asp-route-id1="123" asp-route-id2="P001">Demo3</a>
@*Above Tag renders :> <a href="/demo/cc/123/P001">Demo3</a>*@ Link 3
<br />
@*[Route("cc/{id1}/{id2}")]*@
<br />
<a asp-controller="demo" asp-action="cc" asp-route-id1="123" asp-route-id2="abc">Demo via CC</a>
@*Above Tag renders :> <a href="/demo/cc?id1=123&id2=abc">Demo via CC</a>*@ Link 4
@*[路由(“demo2/{id}”)]*@
*@链接1
@*[路由(“cj/{id}”)]*@
*@链接2
@*[路由(“demo3/{id1}/{id2}”)]*@
*@链接3
@*[路由(“cc/{id1}/{id2}”)]*@
*@链接4
Demo2.cshtml
@*[Route("index")]*@
<br />
<a asp-controller="demo" asp-action="index">Index Page</a>
@*Above Tag renders :> <a href="/demo/MyDemoPage">Index Page</a>*@ Link 5
<br />
@*[Route("MyDemoPage")]*@
<br />
<a asp-controller="demo" asp-action="MyDemoPage">Index Page via MyDemoPage
Route</a>
@*Above Tag renders :> <a href="/demo/MyDemoPage">Index Page via MyDemoPage
Route</a>*@ Link 6
@*[路线(“索引”)]*@
*@链接5
@*[路线(“MyDemoPage”)]*@
*@链接6
我不明白为什么链接4和链接3在index.cshtml和
链接5和链接6呈现相同的href
请帮助…因为链接5和链接6的不同结果是由不同的规则生成的 对于URL生成,
RouteCollection
调用以使用IRouter
生成URL。有两个默认irouter,Microsoft.AspNetCore.Mvc.Internal.AttributeRoute
和Microsoft.AspNetCore.Mvc.Internal.mvcroutHandler
对于asp action=“index”
,它由AttributeRoute
处理,并将MyDemoPage
排序在index
之前。您可以通过检查来检查比较逻辑。如果将[Route(“MyDemoPage”)]
更改为[Route(“MyDemoPage”)]
,它将生成/demo/index
对于asp action=“MyDemoPage”
,GetMatches
为IList
返回零计数。然后,它转到MvcRouteHandler
,并调用RouteBase
。将生成/demo/MyDemoPage
GetMatches
的不同结果由控制器操作中是否存在asp操作的值来控制。对于您的场景,Index
是存在的,但是MyDemoPage
不是,没有相应的MyDemoPage
方法
更新
再次,关键的不同结果是由
操作
在控制器方法中是真实存在的。
对于asp action=“cc”
,在DemoController
中没有cc
操作,它与控制器MVC活页夹一起,格式为/demo/cc?id1=123&id2=abc
对于asp action=“demo3”
,有一个名为demo3
的操作,它由Router Attribute Binder
生成,并将依次生成\u template=“demo/cc/{id1}/{id2}”
和\u template=“demo/demo3/{id1}/{id2}”。对于订单,它将返回/demo/cc/123/P001
,因为链接5和链接6的不同结果是由不同的规则生成的
对于URL生成,RouteCollection
调用以使用IRouter
生成URL。有两个默认irouter,Microsoft.AspNetCore.Mvc.Internal.AttributeRoute
和Microsoft.AspNetCore.Mvc.Internal.mvcroutHandler
对于asp action=“index”
,它由AttributeRoute
处理,并将MyDemoPage
排序在index
之前。您可以通过检查来检查比较逻辑。如果将[Route(“MyDemoPage”)]
更改为[Route(“MyDemoPage”)]
,它将生成/demo/index
对于asp action=“MyDemoPage”
,GetMatches
为IList
返回零计数。然后,它转到MvcRouteHandler
,并调用RouteBase
。将生成/demo/MyDemoPage
GetMatches
的不同结果由控制器操作中是否存在asp操作的值来控制。对于您的场景,Index
是存在的,但是MyDemoPage
不是,没有相应的MyDemoPage
方法
更新
再次,关键的不同结果是由
操作
在控制器方法中是真实存在的。
对于asp action=“cc”
,在DemoController
中没有cc
操作,它与控制器MVC活页夹一起,格式为/demo/cc?id1=123&id2=abc
对于asp action=“demo3”
,有一个名为demo3
的操作,它由Router Attribute Binder
生成,并将依次生成\u template=“demo/cc/{id1}/{id2}”
和\u template=“demo/demo3/{id1}/{id2}”。对于订单,它将返回/demo/cc/123/P001
#陶卓-感谢您的时间。对于链接5和链接6,它们都使用相同的属性asp-route-id1和asp-route-id2,只有操作值不同,即“cc”和“demo3”,但其中一个是使用旧式查询字符串创建链接,即cc?id1=123和id2=abc,另一个是创建cc/123/P001#Tao Zhuo-有什么不同#Tao Zhuo-感谢时间。对于链接5和链接6,它们都使用相同的属性asp-route-id1和asp-route-id2,只有操作值不同,即“cc”和“demo3”,但其中一个是使用旧式查询字符串创建链接,即cc?id1=123&id2=abc,另一个是创建cc/123/P001#Tao Zhuo-有什么不同