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);
        }

那麼瀏覽器需要這樣訪問:
在這裏插入圖片描述

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