Asp.NetCore Web開發之路由


接着講asp.net core web開發,這節講路由系統(Route)。

在asp.net core中通過路由來將請求映射到對應的action,主要用到兩個中間件,UseRouting()和UseEndpoints() 前者用於設置請求和action的映射關系,后者用於請求沒有對應action的情況(一般是設置路由到主頁,或者錯誤頁面)

 

 MVC中路由到控制器

 一個新建的mvc模板,最后一個中間件默認是:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

 這是一個傳統路由,用於將請求映射到控制器的action,默認是訪問home控制器下的index界面,並且支持使用REST風格傳入一個可空參數(不是必須的),也就是/{id?}這個項,我們也可以自己定義這個路由規范,改成自己特定的路徑。

 

  HTTP謂詞模板

   http謂詞模板有:

   HttpGet HttpPost HttpPut HttpDelete HttpHead HtttpPatch

   它們也是路由的一種,一般用在web api中,用來限制為某種請求,從字面上也能看出它們的作用,標記為HttpGet路由的action,只能接受GET請求。

 

  Web API 中的路由規范

  在web api中,一般會使用ApiController這個特性標記控制器,它的作用僅返回序列化的數據,不會返回視圖,下面看段代碼:

app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });

通過VS腳手架生成的web api模板,它的終點路由是映射到控制器,沒有做什么默認化,所以需要控制器自己定義路由,在生成的控制器中,默認的路由為:

 [Route("[controller]")]
 public class WeatherForecastController : ControllerBase
 {}

 [controller]會自動轉化為控制器名稱,這點跟MVC一樣,api一般會用到HTTP謂詞模板:

[HttpPost(upload/postdata)]
public string Post()
{
    return "error";
}

這樣限制了訪問的方法必須是Post,而且我們可以自定義url路徑,上述代碼我將Post()action的訪問形式改為最后的路徑必須是upload/postdata

總的來說,使用路由,可以避免action名稱直接暴露在外面,並且限制請求方法對action的訪問,可以增強安全性。

 

這是我的公眾號二維碼,獲取最新文章,請關注此號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM