91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET?Core中MVC模式怎么實現路由

發布時間:2022-04-07 10:42:37 來源:億速云 閱讀:228 作者:iii 欄目:開發技術

這篇“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模式怎么實現路由”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南召县| 庆城县| 永靖县| 英超| 三台县| 英吉沙县| 公主岭市| 临沂市| 龙川县| 诸城市| 乐至县| 湘潭市| 沂水县| 阿尔山市| 突泉县| 陆良县| 习水县| 霞浦县| 马边| 抚松县| 安塞县| 昌乐县| 宜丰县| 永昌县| 大田县| 井研县| 布拖县| 珲春市| 临桂县| 化州市| 安岳县| 革吉县| 延长县| 云龙县| 涪陵区| 高要市| 鄱阳县| 时尚| 额敏县| 柞水县| 新郑市|