5-1.ASP.NET Core MVC 入門教學 - 基本觀念及屬性標籤

ASP.NET Core MVC 入門教學

一開始我們先創一個空白的ExampleController的空白控制器,作為等等的示範

由於我們這張只談controller,所以先把回傳View改成回傳字串就好

namespace Kcg.Controllers
{
    public class ExampleController : Controller
    {
        public string Index()
        {
            return "Index";
        }
    }
}

controller是整個MVC中主要入口的第一關,那到這邊應該已經很熟悉,要怎麼進入這個Controller

就是在網址打上/Example,就會看到畫面回傳Index,那這邊因為等等要示範又沒使用上view,所以我用postman來做讀取

其實到這邊,基本個controller其實已經會了,所以我們接著來講一些也是基本的屬性標籤

屬性標籤是什麼?其實之前已經看過了[HttpPost]跟[ActionName]都是,而用法就是蓋在該方法上即可

是一種在.net core裡面方便直覺,又好用的寫法

public string Delete()
{
    return "Delete";
}

[HttpPost]
public string DeletePost()
{
    return "DeletePost";
}

先來看看[HttpPost]的標籤,這主要是我們在網頁中送出表單的資料主流會是用Post方法來送出

所以我們為了要接到使用者傳來的post要求,就會在要接的方法上面蓋上一個[HttpPost]標籤

這樣使用者使用post傳來的要求,就會被這個方法給接到,我們就來試試看

緊接著我們就要來講到[ActionName]標籤,這裡可以看到我們網址是用DeletePost,因為方法名稱不能重複,且網址的基本規則設計就是這樣

那如果我們想要打破這個規則改用成Post /delete也進入這個方法該怎麼做呢?就是用[ActionName]標籤

[HttpPost, ActionName("delete")]
public string DeletePost()
{
    return "DeletePost";
}

使用標籤就可以很簡潔又輕鬆的達到我們的目的


那接著我們來談一下路由標籤,什麼是路由標籤?就是決定我們網址的一個標籤

在我們MVC中,之前已經談到很多次,基本的路由規則有設定在Program.cs中

那如果我們要額外增加規則可以修改Program.cs中的路由設定

但其實也可以在Controller中透過路由標籤來修改,我們就來動手試試吧

namespace Kcg.Controllers
{
    [Route("example2")]  //在class上面蓋上一個路由標籤example2
    public class ExampleController : Controller
    {
        public string Index()
        {
            return "Index";
        }

        public string Delete()
        {
            return "Delete";
        }

        [HttpPost,ActionName("delete")]
        public string DeletePost()
        {
            return "DeletePost";
        }
    }
}

此時我們的網址第一層就會變成example2而不是example

而且這個路由標籤會大於Program.cs中的路由設定

也就是說在這邊設了路由標籤,就不在會依照Program.cs中的路由設定了

自己試一下會發現Program.cs中的規則都讀不到資料了甚至出現錯誤,連ActionName也不起作用了

那上面這個錯誤是說有多個同樣的進入點,他不知道該進入哪個方法,為什麼忽然會變成有多個?

是因為我們使用[Route("example2")]後,整個路由規則都改變了

以下這兩個方法會是同一個進入點,那我們要怎麼把它們分開呢?可以利用Http方法標籤+名稱

//example
[HttpGet]
public string Index()
{
    return "Index";
}


//example/delete
[HttpGet("delete")]
public string Delete()
{
    return "Delete";
}

那這邊的網址規則就會是example2([Route("example2")])/加上名稱

我們就來讀讀看

[HttpPost("delete")]
public string DeletePost()
{
    return "DeletePost";
}

那由於ActionName已經不起作用了,下面的post我們可以改成這樣,那讀取方式如下

最後,有可能你有特殊需求,同一個方法會有多個網址,那該如何設定呢?很簡單,就再往上蓋上去就對了,這樣的多網址設定是ActionName做不到的

所以有多網址指向同一個方法的需求,就要用這種方式去做,當然這在Program.cs中的路由也可以設定,這有機會後面在說

[HttpPost("delete2")]
[HttpPost("delete")]
public string DeletePost()
{
    return "DeletePost";
}

這樣delete2跟delete的post方法都會進到這個函式中


所以這邊可以看到,再net core之中,網址是可以很活的去設定跟改變的

那這節就是在講一下基本的Controller的觀念,跟一些基本會再Controller會用到的屬性標籤介紹給大家知道

 




Copyright © 凱哥寫程式 2022 | Powered by TalllKai ❤