iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ASP.NET Core中MVC模式怎么实现路由
  • 214
分享到

ASP.NET Core中MVC模式怎么实现路由

2023-06-29 21:06:35 214人浏览 泡泡鱼
摘要

这篇“asp.net Core中mvc模式怎么实现路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ASP.net

这篇“asp.net Core中mvc模式怎么实现路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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 });    }}

响应结果:

ASP.NET Core中MVC模式怎么实现路由

如果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:

ASP.NET Core中MVC模式怎么实现路由

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:

ASP.NET Core中MVC模式怎么实现路由

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:

ASP.NET Core中MVC模式怎么实现路由

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)订单两个业务场景在MVC中配置使用默认传统路由和区域路由:

public class Startup{      public void Configure(IApplicationBuilder app)    {        app.UseMvc(routes =>        {            routes.MapAreaRoute(                name: "MyAreaPurchase",                areaName: "Purchase",                template: "Purchase/{controller}/{action}/{id?}");            routes.MapAreaRoute(                name: "MyAreaSale",                areaName: "Sale",                template: "Sale/{controller}/{action}/{id?}");            routes.MapRoute(                name: "default",                template: "{controller=Home}/{action=Index}/{id?}");            //等价于            //routes.MapAreaRoute("purOrder_route", "Purchase",            //"Purchase/{controller}/{action}/{id?}");            //routes.MapAreaRoute("saleOrder_route", "Sale",            //"Sale/{controller}/{action}/{id?}");            //routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");        });    }}

在上面的示例中,路由值将与以下操作匹配:

[Area("Purchase")]public class PurOrderController : Controller{    public IActionResult Index()    {        return View();    }}[Area("Sale")]public class SaleOrderController : Controller{    public IActionResult Index()    {        return View();    }}

在每个控制器加入AreaAttribute属性是表示该控制器是某个区域的一部分,比方说,PurOrderController控制器位于Purchase区域中,SaleOrderController控制器位于Sale区域中。 而没有 [Area] 属性的控制器不是任何区域的成员,在路由提供area路由值时不匹配时,打开对应控制器下的视图时将无法打开。在上面的示例中,只有所列出PurOrderController、SaleOrderController控制器下视图Index的路由值 { area = Purchase, controller = PurOrder, action = Index } 、{ area = Sale, controller = SaleOrder, action = Index }匹配才能打开对应链接。

ASP.NET Core中MVC模式怎么实现路由

ASP.NET Core中MVC模式怎么实现路由

4.实现IActionConstraint的路由约束

实现IActionConstraint约束最简单的方法是创建派生自System.Attribute的类,并将其置于操作(Action)和控制器(Controller)上。 MVC将自动发现任何应用为属性的IActionConstraint属性,便对应用程序模型应用程序进行约束。在下面的示例中,对路由数据中的国家/地区选择操作进行约束。

public class CountrySpecificAttribute : Attribute, IActionConstraint{    private readonly string _countryCode;    public CountrySpecificAttribute(string countryCode)    {        _countryCode = countryCode;    }    public int Order    {        get        {            return 0;        }    }    public bool Accept(ActionConstraintContext context)    {        string routeDataValue = context.RouteContext.RouteData.Values["id"] == null ? "" : context.RouteContext.RouteData.Values["id"].ToString();        return string.Equals(            routeDataValue,            _countryCode,            StrinGComparison.OrdinalIgnoreCase);    }}public class HomeController : Controller{    [CountrySpecific("en-us")]    public IActionResult Index(string id)    {        return View();    }}

根据官网解释IActionConstraint.Order是顺序约束意思,比如HomeController 控制器上有[CountrySpecific("en-us")]和[HttpGet](或者其他自定义属性约束)属性约束,数值较低的属性约束先运行。响应结果通过下面表格进行分析:

Route Url

Result

[SERVICE_NAME]/Home/Index/en-us

200

[SERVICE_NAME]/Home/Index/zh-cn

404

通过以上的表格可以知道,在此例中,当Index传入路由值(en-us)匹配时,Accept方法返回true以表示该操作是匹配项,然后可以打开连接,反之传入值(zh-cn)不匹配,则404。

以上就是关于“ASP.NET Core中MVC模式怎么实现路由”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: ASP.NET Core中MVC模式怎么实现路由

本文链接: https://www.lsjlt.com/news/326479.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core中MVC模式怎么实现路由
    这篇“ASP.NET Core中MVC模式怎么实现路由”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ASP.NET...
    99+
    2023-06-29
  • ASP.NET Core中MVC模式实现路由二
    目录1.URL生成2.URL生成方式2.1根据操作名称生成URL2.2根据路由生成URL2.3在HTML中生成URL2.4在操作结果中生成URL3.区域(Area)4.实现IActi...
    99+
    2024-04-02
  • ASP.NET Core中MVC模式实现路由一
    目录1.前言2.设置路由中间件3.传统路由4.多个路由4.1定义多个路由4.2区分操作5.属性路由5.1 属性路由5.2 使用 Http[Verb] 属性的属性路由5.3合并路由5....
    99+
    2024-04-02
  • ASP.NET Core MVC路由怎么用
    本篇内容介绍了“ASP.NET Core MVC路由怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! AS...
    99+
    2023-06-30
  • ASP.NET MVC实现区域路由
    目录一、区域路由二、示例程序1、新建区域路由2、注册区域路由2.1、区域路由文件2.2、全局注册区域路由三、测试区域路由一、区域路由 为了管理网站中大量的文件,在ASP.NET MV...
    99+
    2024-04-02
  • ASP.NET MVC实现路由功能
    1、定义路由、路由规则 public static void RegisterRoutes(RouteCollection routes) { ...
    99+
    2022-11-13
    ASP.NET MVC 路由功能
  • ASP.NET Core MVC中怎么实现过滤器
    本篇内容介绍了“ASP.NET Core MVC中怎么实现过滤器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!过滤器如何...
    99+
    2023-06-29
  • ASP.NET Core MVC中的模型怎么使用
    本篇内容介绍了“ASP.NET Core MVC中的模型怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.模型绑...
    99+
    2023-06-30
  • ASP.NET Core中怎么给路由规则命名
    今天就跟大家聊聊有关ASP.NET Core中怎么给路由规则命名,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。比如,放到 /Views 下。Views(目录)  ...
    99+
    2023-06-19
  • ASP.NET Core MVC中Form Tag Helpers怎么用
    这篇文章主要介绍了ASP.NET Core MVC中Form Tag Helpers怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下...
    99+
    2023-06-29
  • ASP.NET Core MVC中的视图怎么用
    本篇内容介绍了“ASP.NET Core MVC中的视图怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ASP.NE...
    99+
    2023-06-30
  • ASP.NET Core MVC中的标签TagHelper怎么用
    本篇内容主要讲解“ASP.NET Core MVC中的标签TagHelper怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core ...
    99+
    2023-06-30
  • 怎么给ASP.NET MVC及WebApi添加路由优先级
    本篇内容介绍了“怎么给ASP.NET MVC及WebApi添加路由优先级”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为什么需要路由优先...
    99+
    2023-06-17
  • vue路由的两种模式怎么实现
    这篇文章主要介绍“vue路由的两种模式怎么实现”,在日常操作中,相信很多人在vue路由的两种模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue路由的两种模式怎么...
    99+
    2024-04-02
  • ASP.NET Core中的Options选项模式怎么配置
    这篇文章主要介绍“ASP.NET Core中的Options选项模式怎么配置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ASP.NET Core中的Options选项模式怎么配...
    99+
    2023-06-29
  • vue路由模式有哪些及怎么实现
    本篇内容介绍了“vue路由模式有哪些及怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue路由模式有:1、hash模式,使用URL的...
    99+
    2023-07-04
  • ASP.NET Core自动生成小写破折号路由的实现方法
    目录1、如何生成小写的路由可以这样设置2、生成带破折号并且小写的路由可以这样设置3、解决方案3.1对于Asp.NetCore2.2MVC:3.2  对于Asp.N...
    99+
    2024-04-02
  • 实现ASP.NET Core自动生成小写破折号路由的方法
    这篇文章主要讲解了“实现ASP.NET Core自动生成小写破折号路由的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“实现ASP.NET Core自动生成小写破折号路由的方法”吧!默认情...
    99+
    2023-06-14
  • ASP.NET Core MVC 修改视图的默认路径及其实现原理解析
    本章将和大家分享如何在ASP.NET Core MVC中修改视图的默认路径,以及它的实现原理。 导语:在日常工作过程中你可能会遇到这样的一种需求,就是在访问同一个页面时PC端和移动端...
    99+
    2024-04-02
  • ASP.NET MVC中怎么实现分页效果
    ASP.NET MVC中怎么实现分页效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。分页代码:PagerHelper.cs-->  ...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作