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

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

  • 相关阅读:
    【Django总结】详解Django admin高级用法
    【Django总结】Django model中的class Meta详解
    【Django总结】django中的objects.get和objects.filter方法的区别
    【Django总结】Django的时间字段DateTimeField
    【Django总结】Django数据模型的一些字段解析
    codechef Chef and Chefcoin
    codechef Hikaru, Touya and Waya
    [CmdOI2019]口头禅
    Codeforces Round #664 (Div. 1)(E未做)
    AtCoder Grand Contest 034
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13695195.html
Copyright © 2020-2023  润新知