如何使用.net Core在一个控制器中创建少量url

时间:2019-06-19 11:07:15

标签: c# asp.net asp.net-core

我使用ASP .NET核心,但是有问题。

我有3个页面,可以在一个控制器中创建一个页面,但是对于此页面,我必须只有一个控制器,在此控制器中,我必须具有一个可以创建单独URL的功能。 3页)。

例如:

* http://mydomain/page/ *主页,负载,博客;

为此,我需要导航,但是我将拥有相同的 HTML文件,只会更改模型中的数据。

因此,我将有3个导航按钮,用于导航用户同一页面,但是我将从模型以及控制器收到的其他内容只是更改页面URL。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您不想重复HTML吗?使用一个视图。然后您可以拥有一个如以下代码段的控制器:

class PagesController : Controller
{
    [HttpGet("about")]
    public IActionResult About() => View("MyCommonView", yourModel); // get the model from wherever you plan to

    [HttpGet("contact")]
    public IActionResult Contact() => View("MyCommonView", yourModel);

    [HttpGet("whateverelse")]
    public IActionResult WhateverElse() => View("MyCommonView", yourModel);
}

可能只有一个动作,但是我不会这么做。取而代之的是,每个动作都具有单独的视图,并放置三个动作布局文件所共有的标记。这将使不同的操作更具灵活性。

答案 1 :(得分:1)

一种方法是使用Route属性装饰您的动作:

[Route("page")]
public class PagesController : Controller
{
    // you may also use [HttpGet("{pageName}", Name = "PagePath")] instead,
    // to explicitly match HTTP GET requests
    [Route("{pageName}", Name = "PagePath")]
    public IActionResult GetPage(string pageName)
    {
        switch(pageName?.ToLower())
        {
            case "home":
                return View("Page", homeModel);
            case "home":
                return View("Load", loadModel);
            case "home":
                return View("Blog", blogModel);
            default:
                return NotFound();
        }
    }
}

现在,您可以在Views/Pages/Page.cshtml上创建视图并生成与助手的链接:

@Url.RouteUrl("PagePath", new { pageName = "Home" }) <!-- will produce "/page/Home" string -->