【问题标题】:Combining route mappings in WebApi在 WebApi 中组合路由映射
【发布时间】:2023-03-27 10:17:01
【问题描述】:

我在我的 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" });

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

Servicename
Servicename and location
Servicename and instanceId

【问题讨论】:

    标签: c# asp.net-web-api owin asp.net-web-api-routing katana


    【解决方案1】:

    ASP.NET Web API 2 中,您可以使用属性路由,而不必使用MapHttpRoute 以这种方式定义所有路由。

    解释可以在here找到。

    在您的 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);
    
        }
    }
    

    你的控制器应该是这样的:

    [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。 这已经没有必要了。

    【讨论】:

      猜你喜欢
      • 2016-07-16
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      相关资源
      最近更新 更多