首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WebApi中组合路由映射

在WebApi中组合路由映射
EN

Stack Overflow用户
提问于 2014-12-16 22:53:15
回答 1查看 10.9K关注 0票数 10

我在我的WebApi片假名应用程序中使用路由。我有以下两个工作正常的路由映射。我的问题是,我可以使用可选参数将这些组合到单个路由映射中吗?我看不出有什么明显的方法可以做到这一点并保留所需的功能。我是个新手,可能错过了一种帮助我实现这一目标的技术。如果路由必须保持这种方式,那么这不是问题。

代码语言:javascript
复制
        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" });

所需的功能是通过提供以下详细信息来注销服务:

代码语言:javascript
复制
Servicename
Servicename and location
Servicename and instanceId
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-17 06:54:42

ASP.NET Web API2中,您可以使用属性路由,而不必使用MapHttpRoute定义所有路由。

可以在here上找到解释。

在Owin Startup中,您必须使用MapHttpAttributeRoutes启用属性路由

代码语言:javascript
复制
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);

    }
}

你的控制器应该看起来像这样:

代码语言:javascript
复制
[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();
    }
}

正如您所看到的,我已经使用RoutePrefix定义了端点和路由约束来限制参数,如本文所建议的那样。您甚至可以创建自己的自定义约束。

本文建议您必须安装NuGetMicrosoft.AspNet.WebApi.WebHost。这不是必要的,艾莫尔。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27507394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档