接着講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的訪問,可以增強安全性。
這是我的公眾號二維碼,獲取最新文章,請關注此號