2016-03-11 52 views
1

得到一個應用程序,使得帶有一些參數的Get請求到我的舊api現在我想使用.Net MVC6創建一個新的api,但我無法更改所有客戶端以供他們使用不同的Uri。在ASP.NET WEB API中的複雜對象2

我需要讓我的新的API與一種requests.The查詢風格兼容是這樣的:localhost/api/locations?location[lat]=12&location[lng]=21

public class Location 
{ 
    public string lat; 
    public string lng; 
} 

[Route("api/[controller]")] 
public class LocationsController : Controller 
{   
    [HttpGet] 
    public ActionResult Get(Location loc) 
    { 
     var av= new CreatedAtActionResult("","",null,null); 
     return av; 
    } 
} 

我的問題是,我怎麼能這個查詢的「種」結合參數?

回答

3

的一件容易的事。將覆蓋參數名:

public ActionResult Get([FromUri(Name = "location[lat]")]string lat, [FromUri(Name = "location[lng]")]string lng) 
{ 
} 

Alternativelly你可以實現一個自定義類型轉換器或ModelBinder的。

你可以找到所有在這裏的不同可能性的很好的概述: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api


更新: 我發現在Changing the parameter name Web Api model binding

+0

它可以與asp.net核心1.0一起工作嗎? (我對這個版本還是有點迷糊) –

+2

如果你使用.Net核心,你應該使用MVC 6而不是Web Api 2 – AleFranz

+0

我的不好..去更新我的問題 –

1

您可以通過這樣叫你的API:

api/locations?lat=xxx&lng=zzz

+1

類似的問題作出了編輯我的問題。但問題是我無法改變請求的形式。 –

+1

你可能需要實現一個自定義的'IModelBinder' – Ric

相關問題