WebApi

2014-12-16 33 views
8

'daki yol eşlemelerini birleştirmek WebApi Katana uygulamasında yönlendirmeyi kullanıyorum. İyi çalışan aşağıdaki iki yol eşlemelerine sahibim. Sorum şu, bunları isteğe bağlı parametreler kullanarak tek bir yol haritasıyla birleştirebilir miyim? Bunu yapmak için açık bir yol göremiyorum ve gerekli işlevleri saklıyorum. Bu konuda yeniyim ve yardımımın bunu başarabileceğine dair bir tekniği kaçırmış olabilirim. Yolların bu şekilde kalması gerekiyorsa, bu sorun olmaz.WebApi

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

gerekli işlevselliği aşağıdaki ayrıntıları sağlayarak bir hizmet kaydını şudur:

Servicename 
Servicename and location 
Servicename and instanceId 

cevap

11

ASP.NET Web API size yönlendirme özelliğini kullanabilirsiniz 2 ve tanımlamak gerekmez Tüm rotalarınızı MapHttpRoute ile bu şekilde.

Açıklama, here adresinde bulunabilir.

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); 

    } 
} 

ve denetleyici bu gibi görünmelidir: Eğer MapHttpAttributeRoutes kullanarak yönlendirme özelliğini etkinleştirmek zorunda Startup sizin Owin yılında

[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(); 
    } 
} 

ben RuotePrefix kullandım görebileceğiniz gibi makalede önerildiği gibi, parametreleri sınırlamak için son nokta ve yol kısıtlamalarını cihazlara bağlamak. Kendi özel kısıtlamalarınızı bile oluşturabilirsiniz.

Makale, NuGet paketini Microsoft.AspNet.WebApi.WebHost yüklemeniz gerektiğini önerir. Bu gerekli değil aymore.