2016-01-18 22 views
13

Web api aracılığıyla erişilebilen özel olarak adlandırılan yöntemlerin yanı sıra, her denetleyici için birden çok Get() yöntemini desteklemeye çalışıyorum. Bunu MVC 5'te yaptım, ancak MVC 6'da nasıl yapıldığını anlayamıyorum. Herhangi bir fikir var mı? Teşekkürler.MVC 6 Çoklu Yöntemleri Al

cevap

15

Sen nitelik yönlendirme linki kullanabilirsiniz -

[Route("api/[controller]")] /* this is the defualt prefix for all routes, see line 20 for overridding it */ 
public class ValuesController : Controller 
{ 
    [HttpGet] // this api/Values 
    public string Get() 
    { 
     return string.Format("Get: simple get"); 
    } 

    [Route("GetByAdminId")] /* this route becomes api/[controller]/GetByAdminId */ 
    public string GetByAdminId([FromQuery] int adminId) 
    { 
     return $"GetByAdminId: You passed in {adminId}"; 
    } 

    [Route("/someotherapi/[controller]/GetByMemberId")] /* note the/at the start, you need this to override the route at the controller level */ 
    public string GetByMemberId([FromQuery] int memberId) 
    { 
     return $"GetByMemberId: You passed in {memberId}"; 
    } 

    [HttpGet] 
    [Route("IsFirstNumberBigger")] /* this route becomes api/[controller]/IsFirstNumberBigger */ 
    public string IsFirstNumberBigger([FromQuery] int firstNum, int secondNum) 
    { 
     if (firstNum > secondNum) 
     { 
      return $"{firstNum} is bigger than {secondNum}"; 
     } 
     return $"{firstNum} is NOT bigger than {secondNum}"; 
    } 
} 

daha fazla ayrıntı için buraya bakınız - Müthiş http://nodogmablog.bryanhogan.net/2016/01/asp-net-5-web-api-controller-with-multiple-get-methods/

+0

teşekkürler! Normal iç içe rotaları kullanabileceğim için bu daha iyi bir çözümdü. –

+0

, lütfen [soru] konusunu inceleyin (https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208

25

Aynı URL modeline sahip birden fazla Get yöntemine sahip olamazsınız. Öznitelik yönlendirme özelliğini kullanabilir ve farklı URL kalıpları için çoklu GET yöntemini ayarlayabilirsiniz.

[Route("api/[controller]")] 
public class IssuesController : Controller 
{ 
    // GET: api/Issues 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "item 1", "item 2" }; 
    } 

    // GET api/Issues/5 
    [HttpGet("{id}")] 
    public string Get(int id) 
    { 
     return "request for "+ id; 
    } 

    // GET api/Issues/special/5 
    [HttpGet("special/{id}")] 
    public string GetSpecial(int id) 
    { 
     return "special request for "+id; 
    } 
    // GET another/5 
    [HttpGet("~/another/{id}")] 
    public string AnotherOne(int id) 
    { 
     return "request for AnotherOne method with id:" + id; 
    } 
    // GET api/special2/5 
    [HttpGet()] 
    [Route("~/api/special2/{id}")] 
    public string GetSpecial2(int id) 
    { 
     return "request for GetSpecial2 method with id:" + id; 
    } 
} 

Sen benim rota kalıplarını tanımlamak için hem HttpGet ve Route özelliklerini kullandığını görebiliriz. Siteniz/API/sorunlar/

Sonucu ["value1","value2"]

talep URL: Yukarıdaki yapılandırma ile

, size aşağıda yanıtları

talep Url alacak: yourSite/api/issues/4

Sonucu request for 4

talep URL: Siteniz/API/special2/6

Sonucu request for GetSpecial2 method with id:6

talep URL: Siteniz/başka/3

Sonucu request for AnotherOne method with id:3

+1

! Çok teşekkür ederim. –

+0

, lütfen [soru] 'u (https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208