Asp.NetCore Web开发之路由

时间:2022-02-11 22:35:50

接着讲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的访问,可以增强安全性。

这是我的公众号二维码,获取最新文章,请关注此号

Asp.NetCore Web开发之路由