2017-02-13 20 views
2

我試圖得到這個工作:如何使用Route屬性將查詢字符串與Web API綁定?

[Route("api/Default")] 
public class DefaultController : ApiController 
{ 
    [HttpGet, Route("{name}")] 
    public string Get(string name) 
    { 
     return $"Hello " + name; 
    } 
} 

通過調用這個http://localhost:55539/api/Default?name=rami但沒有工作,想這也:http://localhost:55539/api/Default/Hello?name=rami,而且這不工作:http://localhost:55539/api/Default/Hello/rami

回答

5

確保屬性的路由在WebApiConfig.cs啓用

config.MapHttpAttributeroutes(); 

ApiController動作可以有多個路由分配給它們。

[RoutePrefix("api/Default")] 
public class DefaultController : ApiController { 

    [HttpGet] 
    //GET api/Default 
    //GET api/Default?name=John%20Doe 
    [Route("")] 
    //GET api/Default/John%20Doe 
    [Route("{name}")] 
    public string Get(string name) { 
     return $"Hello " + name; 
    } 
} 

還有使參數可選,然後讓你調用的URL同列聯參數,讓路由表中使用類似的查詢字符串它是如何在做的選擇慣例爲基礎的路由。

[RoutePrefix("api/Default")] 
public class DefaultController : ApiController { 

    [HttpGet] 
    //GET api/Default 
    //GET api/Default?name=John%20Doe 
    //GET api/Default/John%20Doe 
    [Route("{name?}")] 
    public string Get(string name = null) { 
     return $"Hello " + name; 
    } 
} 
1

在網頁API第一路徑模板匹配發生,然後是行動選擇過程。

你的C#應該是這樣的:

public class DefaultController : ApiController 
{ 
    [HttpGet] 
    [Route("api/Default/{name}")] 
    public string Get(string name) 
    { 
     return $"Hello " + name; 
    } 
} 

現在叫應該是這樣的:

http://localhost:55539/api/Default/Get?name=rami 
相關問題