Ret*_*der 10 c# asp.net-web-api asp.net-web-api-routing owin katana
我在WebApi Katana应用程序中使用路由.我有以下两个路由映射,工作正常.我的问题是,我可以使用可选参数将它们组合成单个路径映射吗?我看不到明显的方法来保持所需的功能.我是新手,可能错过了我帮助我实现这一目标的技巧.如果路线必须保持这种方式,那么这不是问题.
config.Routes.MapHttpRoute(
name: "UnRegister",
routeTemplate: "api/services/{serviceName}/{location}",
defaults: new {controller = "MyController", location = RouteParameter.Optional});
config.Routes.MapHttpRoute(
name: "UnRegister2",
routeTemplate: "api/services/{serviceName}/{instanceId}",
defaults: new { controller = "MyController" });
Run Code Online (Sandbox Code Playgroud)
所需的功能是通过提供以下详细信息来注销服务:
Servicename
Servicename and location
Servicename and instanceId
Run Code Online (Sandbox Code Playgroud)
Lef*_*tyX 13
在ASP.NET Web API 2中,您可以使用属性路由,而不必定义所有路由MapHttpRoute.
可以在这里找到解释.
在您的Owin中,Startup您必须使用MapHttpAttributeRoutes启用属性路由:
public class Startup
{
public static void Configuration(IAppBuilder app)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
// Enable attribute based routing
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
}
Run Code Online (Sandbox Code Playgroud)
你的控制器应该是这样的:
[RoutePrefix("api/service")]
public class ServicesController : ApiController
{
[HttpGet]
[Route("{location}")]
public IHttpActionResult GetByLocation(string location)
{
return Ok();
}
[HttpGet]
[Route("{instanceId:int}")]
public IHttpActionResult GetByInstanceId(int instanceId)
{
return Ok();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我已经习惯于RoutePrefix设置端点和路由约束来限制参数,如文章中所建议的那样.您甚至可以创建自己的自定义约束.
该文章建议您必须安装NuGet包Microsoft.AspNet.WebApi.WebHost.这不是必要的.
| 归档时间: |
|
| 查看次数: |
9536 次 |
| 最近记录: |