路由配置一般是有兩個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);
}
那麼瀏覽器需要這樣訪問: