2017-09-14 74 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"; 
}