asp.net _路由配置

路由配置一般是有两个RouteConfig、WebApiConfig。

RouteConfig

RouteConfig一般是影响页面Controller,如下:

  public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional },说明访问ip+端口,会默认跳到Home页面,Optional 意思是可选,如下:
在这里插入图片描述
如果我们制定controller跟action,也是一样可以访问到Home页面,如下:

在这里插入图片描述

WebApiConfig

WebApiConfig是影响web api相关的ApiController:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务
            // 将 Web API 配置为仅使用不记名令牌身份验证。
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            )
        }
    }

routeTemplate: “api/{controller}/{id}”,说明api请求路径规则是,ip+port+api+controller+id(可选),比如创建testController:

public class testController : ApiController
  {      
      // GET: api/test
      public HttpResponseMessage Get()
      {
          AppHttpResponse r = new AppHttpResponse();
          r.Data = "from server";
          r.Message = "success";      
          return toJson(r);
      }

      // GET: api/test/5
      public string Get(int id)
      {
          return "value";
      }

      // POST: api/test
      public void Post([FromBody]string value)
      {
      }

      // PUT: api/test/5
      public void Put(int id, [FromBody]string value)
      {
      }

      // DELETE: api/test/5
      public void Delete(int id)
      {
      }

      public static HttpResponseMessage toJson(Object obj)
      {
          String str;
          if (obj is String || obj is Char)
          {
              str = obj.ToString();
          }
          else
          {        
              JavaScriptSerializer serializer = new JavaScriptSerializer();
              str = serializer.Serialize(obj);
          }
          HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
          return result;
      }
  }

接口访问如下:
在这里插入图片描述
如果WebApiConfig改成这样:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务
            // 将 Web API 配置为仅使用不记名令牌身份验证。
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/mobile/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            )
        }
    }

浏览器就需要这样访问了:
在这里插入图片描述
除外,可以直接通过 [Route (“api url”)] 标签控制显示的url,而不受WebApiConfig限制,修改了testController如下:

      [Route ("room/fetch")]
        public HttpResponseMessage Get()
        {
            AppHttpResponse r = new AppHttpResponse();
            r.Data = "from server";
            r.Message = "success";
            return toJson(r);
        }

这样需要通过浏览器这样访问:
在这里插入图片描述
如果还想对这个controller的所有接口加上默认前缀,可以这样做:

 [RoutePrefix("api/test")]
    public class testController : ApiController
    {
        private static readonly ILog loginfo = LogManager.GetLogger("loginfo");
        // GET: api/test
        [Route ("room/fetch")]
        public HttpResponseMessage Get()
        {
            AppHttpResponse r = new AppHttpResponse();
            r.Data = "from server";
            r.Message = "success";   
            return toJson(r);
        }

那么浏览器需要这样访问:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章