设为首页 加入收藏

TOP

(9)ASP.NET Core 中的MVC路由二(一)
2019-09-17 17:38:23 】 浏览:39
Tags:ASP.NET Core MVC 路由

 1.URL生成

MVC应用程序可以使用路由的URL生成功能,生成指向操作(Action)的URL链接。 IUrlHelper 接口用于生成URL,是MVC与路由之间的基础部分。在控制器、视图和视图组件中,可通过Url属性找到IUrlHelper的实例。在此示例中,将通过Controller.Url属性使用IUrlHelper接口来生成指向另一项操作的URL。

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var url1= Url.Action("Privacy");//Url:Home/Privacy
        var url2 = Url.Action("Error");//Url:Home/Error
        var url3 = Url.Action("Article");//Url:Blog/Article
        var msg = $"url1: {url1}";
        msg += $"\r\nurl2: {url2}";
        msg += $"\r\nurl3: {url3}";
        return Content(msg);
    }
    [HttpGet("custom/url/to/privacy")]//定义一个路由模版
    public IActionResult Privacy()
    {
        return View();
    }
    public IActionResult Error(string code)
    {
        return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    }
}

响应结果:

如果Url.Action方法都只设置Action名称,那么IUrlHelper接口会获取通过指向当前所在控制器里存在的Action操作,然后生成URL。如果当前控制器里Action操作自定义路由模版,则会生成对应路由模版URL。如果Action不存在当前控制器里,则会生成空字符串的URL。

2.URL生成方式

2.1根据操作名称生成URL

Url.Action (IUrlHelper. Action) 可以通过指定控制器(Controller)名称和操作(Action)名称来生成要链接的内容。而重载方法里还包含添加路由值对象,比如Url.Action("Home", "Index", new { id = 17 }),此处路由值对象就是new { id = 17 }(路由值对象通常是匿名类型的对象)。下面我们通过示例来看看:

public class HomeController : Controller
{
    public IActionResult Index(int id)
    {
        var url = Url.Action("Index", "Home", new { id = 17, color = "red", sex = "m" });
        return View();
    }
}

通过DEBUG查看生成URL:

 

2.2根据路由生成URL

上面的代码演示了如何通过传入控制器和操作名称来生成URL。IUrlHelper还提供 Url.RouteUrl系列的方法。这些方法类似于Url.Action,但它们不会将action和controller的当前值复制到路由值。最常见的用法是指定一个路由名称,以使用特定路由来生成URL,通常不指定控制器或操作名称。

public class HomeController : Controller
{
    public IActionResult Index(int id)
    {
        var url = Url.RouteUrl("Privacy_Name");
        return View();
    }
    [HttpGet("custom/url/to/privacy",Name = "Privacy_Name")]//定义一个路由模版
    public IActionResult Privacy()
    {
        return View();
    }
}

通过DEBUG查看生成URL:

2.3在HTML中生成URL

IHtmlHelper提供HtmlHelper方法Html.BeginForm和Html.ActionLink,可分别生成<form>和 <a>元素。这些方法使用Url.Action方法来生成URL,并且采用相似的参数。HtmlHelper的配套Url.RouteUrl为Html.BeginRouteForm和Html.RouteLink,两者具有相似的功能。

@using (Html.BeginForm("Article", "Blog", FormMethod.Get, new { name = "nForm", id = "idForm" })){}
@Html.ActionLink("Article", "Article", "Blog")

通过浏览器工具查看生成HTML:

2.4在操作结果中生成URL

以上示例展示了如何在控制器中使用IUrlHelper。不过,控制器中最常见的用法是将URL生成为操作结果的一部分。ControllerBase和Controller基类为操作结果提供简便的方法来引用另一项操作。一种典型用法是在接受用户输入后进行重定向。

public IActionResult Edit(int id, Customer customer)
{
    if (ModelState.IsValid)
    {
        // Update DB with new details.
        return RedirectToAction("Index");
    }
    return View(customer);
}

3.区域(Area)

区域是ASP.NET功能,它提供了一种将ASP.NET Core Web应用程序划分为更小的功能组的方法,每个功能组都有自己的一组Razor Pages、控制器(Controllers)、视图(Views)和模型(Models)。区域实际上是应用程序内的结构。在ASP.NET Core Web项目中,Pages、模型、控制器和视图等逻辑组件保存在不同的文件夹中。ASP.NET Core运行时使用命名约定来创建这些组件之间的关系。对于大型应用程序,将应用程序区分为独立的高级功能区域可能更有利。例如,具有多个业务单位(如结账、计费、搜索等)的电子商务应用程序。每个单位都有自己的区域,以包含视图、控制器、Razor Pages和模型。下面的示例我们根据采购(Purchase)和销售(Sale)订单

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Asp.Net Core 轻松学-使用MariaDB.. 下一篇mvc5 源码解析1:UrlRoutingModule

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目