2017-09-14 109 views
0

我有jQuery的訪問查詢參數

var uri = "api/queries"; 

function test(){ 
    var params = { 
     origin: $('#depair').val(), 
     destination: $('#destair').val(), 
     departure_date: $('#depdate').val(), 
     currency: $('#currency').val(), 
    } 
    $.getJSON(uri, params) 
     .done(function (data) { 
      console.log(data); 
    }); 
} 

此功能,將請求發送到該Controller

public class QueriesController : ApiController 
{ 
    [HttpGet] 
    public string GetInfo() 
    { 
     return "blah"; 
    } 
} 

因此,請求是這樣的

http://localhost:55934/api/queries?origin=&destination=&departure_date=&currency=

如何訪問re的參數從控制器內部追求GetInfo方法?

回答

2

您可以使用Model Binding。首先創建一個classViewModel)是這樣的:

public class Querie 
{ 
    public string Origin { get; set; } 
    public string Destination { get; set; } 
    public string Departure_date { get; set; } 
    public string Currency { get; set; } 
} 

然後包括這個類作爲參數傳遞給你的方法是這樣的:

public class QueriesController : ApiController 
{ 
    [HttpGet] 
    public string GetInfo(Querie querie) 
    { 
     //querie.Origin 
     return "blah"; 
    } 
} 

模型綁定從HTTP請求到不同的方法參數的地圖數據。參數可以是簡單類型,如字符串,整數或浮點數,也可以是複雜類型。這是MVC的一大特性,因爲無論數據的大小或複雜程度如何,將傳入數據映射到對應方都是經常重複的場景。

+0

@Fisteon如果您使用模型綁定,請務必查看包含函數,'[Bind(Include =「Prop1,Prop2」)]''。如果你想阻止某些參數被綁定,你可以使用它。這對於安全目的很有用。 –

+0

@DavidLee我認爲不需要使用'Bind',因爲我們創建了一個不使用域類或業務對象或實體的'ViewModel'類,它已經避免了* Mass Assignment *。 –

+0

@SAkbari同意你的觀點,只是想指出,以防他開始在他的項目的其他領域使用它。 –

0
var origin = Request.QueryString["origin"]; 

用你的參數替換「origin」。

1

您可以將它們作爲參數添加到您的函數中。

[HttpGet] 
public string GetInfo(string origin, string destination, string departure_date, string currency) 
{ 
    return "blah"; 
}