zoukankan      html  css  js  c++  java
  • 《Asp.Net Web API》 ----路由机制

    本文参考

    https://blog.csdn.net/zhoukun1008/article/details/52704651

    一、路由表

    在ASP.NET Web API中,一个控制器是处理HTTP请求的一个类,控制器里的Public方法是一个动作方法,当Web API框架接收到一个请求,它将这个请求路由到一个动作

    为了确定调用哪个动作,框架使用了一个路由表定义在App_Start目录下的WebApiConfig.cs文件

    。Web API的默认路由模板是“api/{controller}/{id}”。在这个模板中,“api”是一个文字式路径片段,而{controller}和{id}则是占位符变量。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Http;
    
    namespace MvcApplication1
    {
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{id}",
                   // routeTemplate:"{controller}/{action}/{id}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
                // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
                // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
                // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712//config.EnableQuerySupport();
    
                // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
                // 有关详细信息,请参阅: http://www.asp.net/web-api
                config.EnableSystemDiagnosticsTracing();
            }
        }
    }
    View Code

    二、更改路由表默认设置

           由Controller来确定访问哪个类,再根据Action来确定访问哪个方法

    2.1  修改配置文件

        找到WebApiConfig.cs文件  将原来的routeTemplate: "api/{controller}/{id}",更改为 routeTemplate:"{controller}/{action}/{id}",

    2.2  修改控制器中对应的方法

      添加 [HttpGet]    QueryAllProducts()   ----方法名   

    代码

    /// <summary>
            /// 查询所有产品
            /// </summary>
            /// <returns></returns>
            [HttpGet]
            public IEnumerable<Product> QueryAllProducts() {
                return products;
            }
    
            /// <summary>
            /// 根据id查询
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            [HttpGet]
            public Product QueryProductById(int id) {
    
                var product = products.FirstOrDefault((p) => p.Id == id);
                if (product == null) {
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }
                return product;
            }
    
            /// <summary>
            /// 根据种类查询商品
            /// </summary>
            /// <param name="category"></param>
            /// <returns></returns>
            [HttpGet]
            public IEnumerable<Product> QueryProductsByCategory(string category)
            {
                return products.Where(
                    (p) => string.Equals(p.Category, category,
                        StringComparison.OrdinalIgnoreCase));
            }
    View Code

     测试效果

     2.3 还可以使用注解属性来代替Action的使用

     代码

       /// <summary>
            /// 根据id查询
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            [HttpGet]
            [ActionName("Test")]
            public Product QueryProductById(int id) {
    
                var product = products.FirstOrDefault((p) => p.Id == id);
                if (product == null) {
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }
                return product;
            }
    View Code

    测试效果

  • 相关阅读:
    Python paramiko模块
    前端基础:JavaScript介绍
    前端基础:CSS属性操作
    前端基础:CSS样式选择器
    前端基础:HTML标签(下)
    20181120-10 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 7
    beta阶段贡献分配实施
    Beta发布—美工+文案
    20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 06
    20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 05
  • 原文地址:https://www.cnblogs.com/3309-whp/p/9396517.html
Copyright © 2011-2022 走看看