ASP.. NET WebApi路由和参数类型
本文关键字:参数 类型 路由 NET WebApi ASP | 更新日期: 2023-09-27 18:08:56
我读了很多文章和类似的问题,但这些决定都不适合我。我有三个方法:
public string GetA()
{
return "Hello from GetA";
}
public string GetB(int id)
{
return "Hello from GetB";
}
public string GetC(sting all)
{
return "Hello from GetC";
}
我需要配置这样的路由:
1.http://localhost:63087/api/Test/
2.http://localhost:63087/api/Test/all
3.http://localhost:63087/api/Test/1
4.http://localhost:63087/api/Test/1/all
我如何实现它?
我知道这可能是重复的(1,2,3),但我需要帮助。
提前感谢
另一种解决方案是在路由中添加静态段:
1.http://localhost:63087/api/Test/
2.http://localhost:63087/api/all/Test/
3.http://localhost:63087/api/Test/1
4.http://localhost:63087/api/all/Test/1
实现: public string GetA()
{
return "Hello from GetA";
}
public string GetB(int id)
{
return "Hello from GetB";
}
[Route("api/all/{controller}/{id}")]
[Route("api/all/{controller}")]
public string GetC(int id= 0)
{
return "Hello from GetC";
}
路由配置:
config.Routes.MapHttpRoute(
name: "AllRoute",
routeTemplate: "api/full/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional}
);
试试下面的代码:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/Test",
defaults: new { controller = "Test", action = "GetA"}
);
config.Routes.MapHttpRoute(
name: "WithID",
routeTemplate: "api/Test/{id}",
defaults: new { controller = "Test", action = "GetB", id = UrlParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ALL",
routeTemplate: "api/Test/all",
defaults: new { controller = "Test", action = "GetC"}
);
}
}
像这样配置你的路由
http://localhost:63087/api/Test
http://localhost:63087/api/Test/1
http://localhost:63087/api/Test/1/all
像这样:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/Test",
defaults: new { controller = "Test", action = "GetA"}
);
config.Routes.MapHttpRoute(
name: "Route2",
routeTemplate: "api/Test/{id}",
defaults: new { controller = "Test", action = "GetB" }
);
config.Routes.MapHttpRoute(
name: "Route3",
routeTemplate: "api/Test/{id)/{all}",
defaults: new { controller = "Test", action = "GetC"}
);
所以,你不能有两个路由具有相同的参数计数。
2.http://localhost:63087/api/Test/all
3.http://localhost:63087/api/Test/1
通过这种方式,您可以在所有方法中使用类型为string
的参数:
public string GetA()
{
return "Hello from GetA";
}
public string GetB(string id, string all = "")
{
if (id.Equals("all") || all.Equals("all"))
{
return "Hello all from GetB";
}
return string.Format("Hello {0} from GetB", id);
}
路由配置:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "RouteWithParam",
routeTemplate: "api/{controller}/{id}/{all}",
defaults: new { all = RouteParameter.Optional }
);