Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么asp路由和asp操作相互排斥?_C#_Asp.net Core_Asp.net Core 2.1_Asp.net Core Routing - Fatal编程技术网

C# 为什么asp路由和asp操作相互排斥?

C# 为什么asp路由和asp操作相互排斥?,c#,asp.net-core,asp.net-core-2.1,asp.net-core-routing,C#,Asp.net Core,Asp.net Core 2.1,Asp.net Core Routing,我有以下路线: routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routes.MapRoute(name: "out", template: "outbound/{controller=Home}/{action=Index}/{id?}"); 为什么这是不允许的?此传出URL由HomeCon

我有以下路线:

routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(name: "out", template: "outbound/{controller=Home}/{action=Index}/{id?}");
为什么这是不允许的?此传出URL由
HomeController
和操作方法=
Index

<a asp-route="out" asp-action="a" asp-route-id="someIdValue">This is an outoing URL.</a>
这是一个过时的URL。
生成此传出URL的视图来自
HomeController
Index
方法

为什么它不使用
“out”
路由模板,只使用
“a”
进行操作,并使用
Home
作为控制器来生成
/outbound/Home/a/someIdValue


我可以为
id
提供值,为什么我不能为操作提供值?

您可以使用
asp区域
而不是
asp路径

Startup.cs

    app.UseMvc(routes =>
        {
            routes.MapRoute(name: "out", template: "{area=Outbound}/{controller=Home}/{action=Index}");

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
控制器

[Area("Outbound")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

}



    <a href="/outbound/home/index">Go to Outoing’ Home Page by href="/outbound/home/index"</a> <br>

    <a asp-area="Outbound" asp-controller="Home" asp-action="Index">Go to Outoing’ Home Page by asp-area</a><br>

    @Html.ActionLink("Go to Outoing’ Home Page by @Html.ActionLink", "Index", "Home", new { area = "Outbound" })
在以下标记中,
asp route
属性引用命名路由:

<a asp-route="speakerevals">Speaker Evaluations</a>
如果在
asp-route
之外指定了
asp-controller
asp-action
,则生成的路由可能不是您所期望的

为避免路由冲突,
asp-route
不应与
asp-controller
asp-action
属性一起使用


顺便说一句,
默认路由
区域路由
根据调用顺序自动为其端点分配顺序值





asp路由
asp控制器
asp操作
之间的差异

路由名称(
asp-Route
)可用于基于特定路由生成URL

同时,
{controller}/{action}
还生成指向
主页
控制器和
测试
操作的URL映射

    //works
    <a asp-controller="home" asp-action="test">asp-controller="home" asp-action="test"</a><br>

    //works
    <a asp-route="test">asp-route="test"</a><br>

    //InvalidOperationException
    <a asp-route="test" asp-controller="home" asp-action="test">asp-route="test" asp-controller="home" asp-action="test"</a>
//有效

您可以使用
asp区域
而不是
asp路径

Startup.cs

    app.UseMvc(routes =>
        {
            routes.MapRoute(name: "out", template: "{area=Outbound}/{controller=Home}/{action=Index}");

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
控制器

[Area("Outbound")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

}



    <a href="/outbound/home/index">Go to Outoing’ Home Page by href="/outbound/home/index"</a> <br>

    <a asp-area="Outbound" asp-controller="Home" asp-action="Index">Go to Outoing’ Home Page by asp-area</a><br>

    @Html.ActionLink("Go to Outoing’ Home Page by @Html.ActionLink", "Index", "Home", new { area = "Outbound" })
在以下标记中,
asp route
属性引用命名路由:

<a asp-route="speakerevals">Speaker Evaluations</a>
如果在
asp-route
之外指定了
asp-controller
asp-action
,则生成的路由可能不是您所期望的

为避免路由冲突,
asp-route
不应与
asp-controller
asp-action
属性一起使用


顺便说一句,
默认路由
区域路由
根据调用顺序自动为其端点分配顺序值





asp路由
asp控制器
asp操作
之间的差异

路由名称(
asp-Route
)可用于基于特定路由生成URL

同时,
{controller}/{action}
还生成指向
主页
控制器和
测试
操作的URL映射

    //works
    <a asp-controller="home" asp-action="test">asp-controller="home" asp-action="test"</a><br>

    //works
    <a asp-route="test">asp-route="test"</a><br>

    //InvalidOperationException
    <a asp-route="test" asp-controller="home" asp-action="test">asp-route="test" asp-controller="home" asp-action="test"</a>
//有效

您可以添加实际生成的链接吗?或者你有错误吗?@janw是的,/outbound/Home/A可以工作,因为我有一个HomeController和一个名为A()的操作方法。你能添加实际生成的链接吗?或者你有错误吗?@janw是的,/outbound/Home/A可以工作,因为我有一个HomeController和一个名为A()的操作方法。这很有趣,我不知道使用
asp-area
可以实现类似的功能。但是这个答案仍然不能解释为什么
asp-route
asp-action
是相互排斥的,尽管这个问题可能更适合作为GitHub问题。此外,您的答案中的
asp路径
段似乎是对文档的直接引用;也许最好能说得更清楚些。嗨,@janw,谢谢你的建议。我将检查并学习它。“如果asp控制器或asp操作是在asp路由之外指定的,则生成的路由可能不是您所期望的。”。为什么会是这样?你能举个例子吗?在我的问题中,如果它允许您同时指定asp路由和asp操作,我希望它生成/outbound/Home/a,我假设它能够编译。您好,@David Klempfner,如果您同时指定
asp路由
asp操作
,它将不会成功运行。我在回答的最后进行了解释和测试。@Lightman我很感谢你回答“如何”,但我要找的是“为什么”。我不明白他们为什么要这样设计。这很有趣,而且我不知道使用
asp-area
可以实现类似的功能。但是这个答案仍然不能解释为什么
asp-route
asp-action
是相互排斥的,尽管这个问题可能更适合作为GitHub问题。此外,您的答案中的
asp路径
段似乎是对文档的直接引用;也许最好能说得更清楚些。嗨,@janw,谢谢你的建议。我将检查并学习它。“如果asp控制器或asp操作是在asp路由之外指定的,则生成的路由可能不是您所期望的。”。为什么会是这样?你能举个例子吗?在我的问题中,如果它允许您同时指定asp路由和asp操作,我希望它生成/outbound/Home/a,我假设它能够编译。您好,@David Klempfner,如果您同时指定
asp路由
asp操作
,它将不会成功运行。我在回答的最后进行了解释和测试。@Lightman我很感谢你回答“如何”,但我要找的是“为什么”。我看不出他们为什么要这样设计。